home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr12 / inter35a.zip / INTERRUP.D < prev    next >
Text File  |  1993-06-05  |  335KB  |  8,939 lines

  1. Interrupt List, part 4 of 9
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------D-2136-------------------------------
  4. INT 21 - DOS 2+ - GET FREE DISK SPACE
  5.     AH = 36h
  6.     DL = drive number (00h = default, 01h = A:, etc)
  7. Return: AX = FFFFh if invalid drive
  8.     else
  9.         AX = sectors per cluster
  10.         BX = number of free clusters
  11.         CX = bytes per sector
  12.         DX = total clusters on drive
  13. Notes:    free space on drive in bytes is AX * BX * CX
  14.     total space on drive in bytes is AX * CX * DX
  15.     "lost clusters" are considered to be in use
  16.     according to Dave Williams' MS-DOS reference, the value in DX is
  17.       incorrect for non-default drives after ASSIGN is run
  18. SeeAlso: AH=1Bh,AH=1Ch
  19. --------D-213700-----------------------------
  20. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  21.     AX = 3700h
  22. Return: AL = status
  23.         00h successful
  24.         DL = current switch character
  25.         FFh unsupported subfunction
  26. Desc:    Determine the character which is used to introduce command switches.
  27.       This setting is ignored by DOS commands in version 4.0 and higher,
  28.       but is honored by many third-party programs.
  29. Notes:    documented in some OEM versions of some releases of DOS
  30.     supported by OS/2 compatibility box
  31.     always returns DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  32. SeeAlso: AX=3701h
  33. --------D-213701-----------------------------
  34. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  35.     AX = 3701h
  36.     DL = new switch character
  37. Return: AL = status
  38.         00h successful
  39.         FFh unsupported subfunction
  40. Notes:    documented in some OEM versions of some releases of DOS
  41.     supported by OS/2 compatibility box
  42.     ignored by MS-DOS 5+ and DR-DOS 3.41+
  43. SeeAlso: AX=3700h
  44. --------D-2137-------------------------------
  45. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  46.     AH = 37h
  47.     AL = subfunction
  48.         02h get availdev flag
  49.         Return: DL = 00h \DEV\ must precede character device names
  50.                = nonzero \DEV\ is optional
  51.         03h set availdev flag
  52.         DL = 00h    \DEV\ is mandatory
  53.            = nonzero    \DEV\ is optional
  54. Return: AL = status
  55.         00h successful
  56.         FFh unsupported subfunction
  57. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  58.       names without generating an error even if the directory \DEV does
  59.       not actually exist (other paths generate an error if they do not
  60.       exist).
  61.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  62.       effect, and AL=02h always returns DL=FFh
  63. --------k-2137D0BX899D-----------------------
  64. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  65.     AX = 37D0h
  66.     BX = 899Dh ('DI' + 'ET')
  67. Return: AL = FFh if not present as TSR (default return value from DOS)
  68.     AX = 0000h if installed as a TSR
  69.         CX = 899Dh
  70.         DX = version ID
  71. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  72. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  73. --------k-2137D1BX899D-----------------------
  74. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  75.     AX = 37D1h
  76.     BX = 899Dh ('DI' + 'ET')
  77. Return: AX = 0000h
  78.     CX = code segment of TSR part of DIET.EXE
  79.     DX = memory block segment of TSR DIET.EXE
  80.         (0000h if installed as device driver)
  81. SeeAlso: AX=37D0h,AX=37DFh
  82. --------k-2137D2BX899D-----------------------
  83. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  84.     AX = 37D2h
  85.     BX = 899Dh ('DI' + 'ET')
  86. Return: AX = 0000h
  87.     DL = control flag (00h active, else disabled)
  88.     DH = skip flag (nonzero while TSR active)
  89. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  90. --------k-2137D3BX899D-----------------------
  91. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  92.     AX = 37D3h
  93.     BX = 899Dh ('DI' + 'ET')
  94.     DL = control flag (00h active, else disabled)
  95.     DH = skip flag (00h)
  96. Return: AX = 0000h
  97. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  98. --------k-2137D4BX899D-----------------------
  99. INT 21 - DIET v1.43e - GET TSR OPTIONS
  100.     AX = 37D4h
  101.     BX = 899Dh ('DI' + 'ET')
  102. Return: AX = 0000h
  103.     DX = TSR options (see below)
  104. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  105.  
  106. Bitfields for TSR options:
  107.  bit 0    automated compression of DIETed file
  108.  bit 1    automated compression of newly-created file
  109.  bit 2    suppress DIET message
  110.  bit 3    display original file size
  111.  bits 4-15 reserved (0)
  112. --------k-2137D5BX899D-----------------------
  113. INT 21 - DIET v1.43e - SET TSR OPTIONS
  114.     AX = 37D5h
  115.     BX = 899Dh ('DI' + 'ET')
  116.     DX = TSR options (see AX=37D4h)
  117. Return: AX = 0000h
  118. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  119. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  120. --------k-2137D6BX899D-----------------------
  121. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  122.     AX = 37D6h
  123.     BX = 899Dh ('DI' + 'ET')
  124. Return: AX = 0000h
  125.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  126. SeeAlso: AX=37D0h,AX=37D7h
  127. --------k-2137D7BX899D-----------------------
  128. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  129.     AX = 37D7h
  130.     BX = 899Dh ('DI' + 'ET')
  131.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  132.         0000h:0000h for current directory
  133. Return: AX = 0000h
  134. Note:    the specified directory name must include a drive letter and end with
  135.       a backslash
  136. SeeAlso: AX=37D0h,AX=37D6h
  137. --------k-2137DCBX899D-----------------------
  138. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  139.     AX = 37DCh
  140.     BX = 899Dh ('DI' + 'ET')
  141.     DS:DX -> external procedure
  142. Return: AX = 0000h
  143. Note:    the resident code will call the specified external procedure at the
  144.       beginning of decompression and when compression is exited on failure
  145. SeeAlso: AX=37DDh
  146.  
  147. External procedure called with:
  148.     STACK:    WORD    class
  149.             FFFDh creation failed for unknown reasons
  150.             FFFEh creation failed due to lack of space
  151.             FFFFh file creation error
  152.             else file handle of DIETed file to be decompressed
  153.         DWORD    -> compressed filename
  154.         DWORD    -> decompressed or temporary filename
  155. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  156. --------k-2137DDBX899D-----------------------
  157. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  158.     AX = 37DDh
  159.     BX = 899Dh ('DI' + 'ET')
  160. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  161. Note:    unlinks the external procedure specified by AX=37DCh
  162. SeeAlso: AX=37DCh
  163. --------k-2137DEBX899D-----------------------
  164. INT 21 - DIET v1.43e - READ EMS STATUS
  165.     AX = 37DEh
  166.     BX = 899Dh ('DI' + 'ET')
  167. Return: AX = 0000h
  168.     CX = EMS status
  169.         0000h not used
  170.         0001h used as work area
  171.         0002h used for code and as work area
  172.     DX = EMM handle when EMS is in use
  173. --------k-2137DFBX899D-----------------------
  174. INT 21 - DIET v1.43e - UNLOAD TSR
  175.     AX = 37DFh
  176.     BX = 899Dh ('DI' + 'ET')
  177. Return: AX = status
  178.         0000h successful
  179.         00FFh failed
  180. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  181. SeeAlso: AX=37D0h
  182. --------D-2138-------------------------------
  183. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  184.     AH = 38h
  185. --DOS 2.x--
  186.     AL = 00h get current-country info
  187.     DS:DX -> buffer for returned info (see below)
  188. Return: CF set on error
  189.         AX = error code (02h)
  190.     CF clear if successful
  191.         AX = country code (MS-DOS 2.11 only)
  192.         buffer at DS:DX filled
  193. --DOS 3+--
  194.     AL = 00h for current country
  195.     AL = 01h thru 0FEh for specific country with code <255
  196.     AL = 0FFh for specific country with code >= 255
  197.        BX = 16-bit country code
  198.     DS:DX -> buffer for returned info (see below)
  199. Return:    CF set on error
  200.         AX = error code (02h)
  201.     CF clear if successful
  202.         BX = country code
  203.         DS:DX buffer filled
  204. Note:    this function is not supported by the Borland DPMI host, but no error
  205.       is returned; as a workaround, one should allocate a buffer in
  206.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  207.       INT 31/AX=0300h
  208. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  209.  
  210. Format of PC-DOS 2.x country info:
  211. Offset    Size    Description
  212.  00h    WORD    date format  0 = USA    mm dd yy
  213.                  1 = Europe dd mm yy
  214.                  2 = Japan    yy mm dd
  215.  02h    BYTE    currency symbol
  216.  03h    BYTE    00h
  217.  04h    BYTE    thousands separator char
  218.  05h    BYTE    00h
  219.  06h    BYTE    decimal separator char
  220.  07h    BYTE    00h
  221.  08h 24 BYTEs    reserved
  222.  
  223. Format of MS-DOS 2.x,DOS 3+ country info:
  224. Offset    Size    Description
  225.  00h    WORD    date format (see above)
  226.  02h  5 BYTEs    ASCIZ currency symbol string
  227.  07h  2 BYTEs    ASCIZ thousands separator
  228.  09h  2 BYTEs    ASCIZ decimal separator
  229.  0Bh  2 BYTEs    ASCIZ date separator
  230.  0Dh  2 BYTEs    ASCIZ time separator
  231.  0Fh    BYTE    currency format
  232.         bit 2 = set if currency symbol replaces decimal point
  233.         bit 1 = number of spaces between value and currency symbol
  234.         bit 0 = 0 if currency symbol precedes value
  235.             1 if currency symbol follows value
  236.  10h    BYTE    number of digits after decimal in currency
  237.  11h    BYTE    time format
  238.         bit 0 = 0 if 12-hour clock
  239.             1 if 24-hour clock
  240.  12h    DWORD    address of case map routine
  241.         (FAR CALL, AL = character to map to upper case [>= 80h])
  242.  16h  2 BYTEs    ASCIZ data-list separator
  243.  18h 10 BYTEs    reserved
  244.  
  245. Values for country code:
  246.  001h    United States
  247.  002h    Canadian-French
  248.  003h    Latin America
  249.  01Fh    Netherlands
  250.  020h    Belgium
  251.  021h    France
  252.  022h    Spain
  253.  024h    Hungary (not supported by DR-DOS 5.0)
  254.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  255.  027h    Italy
  256.  029h    Switzerland
  257.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  258.  02Bh    Austria (DR-DOS 5.0)
  259.  02Ch    United Kingdom
  260.  02Dh    Denmark
  261.  02Eh    Sweden
  262.  02Fh    Norway
  263.  030h    Poland (not supported by DR-DOS 5.0)
  264.  031h    Germany
  265.  037h    Brazil (not supported by DR-DOS 5.0)
  266.  03Dh    International English [Australia in DR-DOS 5.0]
  267.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  268.  052h    Korea (DR-DOS 5.0)
  269.  056h    China (MS-DOS 5.0+)
  270.  058h    Taiwan (MS-DOS 5.0+)
  271.  05Ah    Turkey (MS-DOS 5.0+)
  272.  15Fh    Portugal
  273.  162h    Iceland
  274.  166h    Finland
  275.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  276.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  277. --------D-2138--DXFFFF-----------------------
  278. INT 21 - DOS 3+ - SET COUNTRY CODE
  279.     AH = 38h
  280.     DX = FFFFh
  281.     AL = 01h thru FEh for specific country with code <255
  282.     AL = FFh for specific country with code >= 255
  283.        BX = 16-bit country code (see AH=38h)
  284. Return: CF set on error
  285.         AX = error code (see AH=59h)
  286.     CF clear if successful
  287. Note:    not supported by OS/2
  288. SeeAlso: INT 2F/AX=1403h
  289. --------D-2139-------------------------------
  290. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  291.     AH = 39h
  292.     DS:DX -> ASCIZ pathname
  293. Return: CF clear if successful
  294.         AX destroyed
  295.     CF set on error
  296.         AX = error code (03h,05h) (see AH=59h)
  297. Notes:    all directories in the given path except the last must exist
  298.     fails if the parent directory is the root and is full
  299.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  300.       it is not possible to make that directory the current directory
  301.       because the path would exceed 64 characters
  302.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  303. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  304. --------D-213A-------------------------------
  305. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  306.     AH = 3Ah
  307.     DS:DX -> ASCIZ pathname of directory to be removed
  308. Return: CF clear if successful
  309.         AX destroyed
  310.     CF set on error
  311.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  312. Notes:    directory must be empty (contain only '.' and '..' entries)
  313.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  314. SeeAlso: AH=39h,AH=3Bh,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  315. --------D-213B-------------------------------
  316. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  317.     AH = 3Bh
  318.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  319. Return: CF clear if successful
  320.         AX destroyed
  321.     CF set on error
  322.         AX = error code (03h) (see AH=59h)
  323. Notes:    if new directory name includes a drive letter, the default drive is
  324.       not changed, only the current directory on that drive
  325.     changing the current directory also changes the directory in which
  326.       FCB file calls operate
  327.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  328. SeeAlso: AH=47h,INT 2F/AX=1105h
  329. --------D-213C-------------------------------
  330. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  331.     AH = 3CH
  332.     CX = file attributes (see below)
  333.     DS:DX -> ASCIZ filename
  334. Return: CF clear if successful
  335.         AX = file handle
  336.     CF set on error
  337.         AX = error code (03h,04h,05h) (see AH=59h)
  338. Notes:    if a file with the given name exists, it is truncated to zero length
  339.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  340.     DR-DOS checks the system password or explicitly supplied password at
  341.       the end of the filename against the reserved field in the directory
  342.       entry before allowing access
  343. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  344.  
  345. Bitfields for file attributes:
  346.  bit 0    read-only
  347.  bit 1    hidden
  348.  bit 2    system
  349.  bit 3    volume label (ignored)
  350.  bit 4    reserved, must be zero (directory)
  351.  bit 5    archive bit
  352.  bit 7    if set, file is shareable under Novell NetWare
  353. --------D-213D-------------------------------
  354. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  355.     AH = 3Dh
  356.     AL = access and sharing modes (see below)
  357.     DS:DX -> ASCIZ filename
  358.     CL = attribute mask of files to look for (server call only)
  359. Return: CF clear if successful
  360.         AX = file handle
  361.     CF set on error
  362.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see AH=59h)
  363. Notes:    file pointer is set to start of file
  364.     file handles which are inherited from a parent also inherit sharing
  365.       and access restrictions
  366.     files may be opened even if given the hidden or system attributes
  367.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  368.     DR-DOS checks the system password or explicitly supplied password at
  369.       the end of the filename against the reserved field in the directory
  370.       entry before allowing access
  371.     sharing modes are only effective on local drives if SHARE is loaded
  372. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  373.  
  374. Bitfields for access and sharing modes:
  375.  bits 2-0 access mode
  376.     000 read only
  377.     001 write only
  378.     010 read/write
  379.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  380.         case-sensitive filenames
  381.  bit 3    reserved (0)
  382.  bits 6-4 sharing mode (DOS 3+)
  383.     000 compatibility mode
  384.     001 "DENYALL" prohibit both read and write access by others
  385.     010 "DENYWRITE" prohibit write access by others
  386.     011 "DENYREAD" prohibit read access by others
  387.     100 "DENYNONE" allow full access by others
  388.     111 network FCB (only available during server call)
  389.  bit 7    inheritance
  390.     if set, file is private to current process and will not be inherited
  391.       by child processes
  392.  
  393. File sharing behavior:
  394.       |    Second and subsequent Opens
  395.  First      |Compat  Deny      Deny     Deny    Deny
  396.  Open      |       All      Write     Read    None
  397.       |R W RW R W RW R W RW R W RW R W RW
  398.  - - - - -| - - - - - - - - - - - - - - - - -
  399.  Compat    R |Y Y Y  N N N     1 N N    N N N  1 N N
  400.     W |Y Y Y  N N N     N N N    N N N  N N N
  401.     RW|Y Y Y  N N N     N N N    N N N  N N N
  402.  - - - - -|
  403.  Deny    R |C C C  N N N     N N N    N N N  N N N
  404.  All    W |C C C  N N N     N N N    N N N  N N N
  405.     RW|C C C  N N N     N N N    N N N  N N N
  406.  - - - - -|
  407.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N 
  408.  Write    W |C C C  N N N     N N N    Y N N  Y N N 
  409.     RW|C C C  N N N     N N N    N N N  Y N N
  410.  - - - - -|
  411.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  412.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  413.     RW|C C C  N N N     N N N    N N N  N Y N
  414.  - - - - -|
  415.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  416.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  417.     RW|C C C  N N N     N N N    N N N  Y Y Y
  418. Legend: Y = open succeeds, N = open fails with error code 05h
  419.     C = open fails, INT 24 generated
  420.     1 = open succeeds if file read-only, else fails with error code
  421.     2 = open succeeds if file read-only, else fails with INT 24
  422. --------v-213DFF-----------------------------
  423. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  424.     AX = 3DFFh
  425. Return: AX = 4A44h if resident
  426. SeeAlso: AX=357Fh,AX=4203h
  427. --------D-213E-------------------------------
  428. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  429.     AH = 3Eh
  430.     BX = file handle
  431. Return: CF clear if successful
  432.         AX destroyed
  433.     CF set on error
  434.         AX = error code (06h) (see AH=59h)
  435. Note:    if the file was written to, any pending disk writes are performed, the
  436.       time and date stamps are set to the current time, and the directory
  437.       entry is updated
  438. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  439. --------D-213F-------------------------------
  440. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  441.     AH = 3Fh
  442.     BX = file handle
  443.     CX = number of bytes to read
  444.     DS:DX -> buffer for data
  445. Return: CF clear if successful
  446.         AX = number of bytes actually read (0 if at EOF before call)
  447.     CF set on error
  448.         AX = error code (05h,06h) (see AH=59h)
  449. Notes:    data is read beginning at current file position, and the file position
  450.       is updated after a successful read
  451.     the returned AX may be smaller than the request in CX if a partial
  452.       read occurred
  453.     if reading from CON, read stops at first CR
  454.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  455. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  456. --------G-213F-------------------------------
  457. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  458.     AH = 3Fh
  459.     BX = handle for character device "TDHDEBUG"
  460.     CX = number of bytes to read
  461.     DS:DX -> buffer for status block (see below)
  462. Return: CF clear if successful
  463.         AX = number of bytes actually read
  464.     CF set on error
  465.         AX = error code (05h,06h) (see AH=59h)
  466. SeeAlso: AH=40h"Turbo Debug"
  467.  
  468. Values for status of command:
  469.  00h successful
  470.  01h invalid handle
  471.  02h no more breakpoints available
  472.  03h hardware does not support specified breakpoint type
  473.  04h previous command prevents execution
  474.  05h debugger hardware not found
  475.  06h hardware failure
  476.  07h invalid command
  477.  08h driver not initialized yet
  478.  FEh recursive entry (hardware breakpoint inside hw bp handler)
  479.  
  480. Format of status block:
  481. Offset    Size    Description
  482.  00h    BYTE    status of command (see above)
  483. ---status for command 01h---
  484.  01h    WORD    device driver interface version number (currently 1)
  485.  03h    WORD    device driver software version
  486.  05h    BYTE    maximum simultaneous hardware breakpoints
  487.  06h    BYTE    configuration bits (see below)
  488.  07h    BYTE    supported breakpoint types (see below)
  489.  08h    WORD    supported addressing match modes (see below)
  490.  0Ah    WORD    supported data matches (see below)
  491.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  492.  0Dh    WORD    size of onboard memory (in K)
  493.  0Fh    WORD    maximum number of trace-back events
  494.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  495.         supported)
  496. ---status for command 04h---
  497.  01h    BYTE    handle to use when referring to the just-set breakpoint
  498.  
  499. Bitfields for configuration bits:
  500.  bit 0    CPU and DMA accesses are distinct
  501.  bit 1    can detect DMA transfers
  502.  bit 2    supports data mask
  503.  bit 3    hardware pass counter on breakpoints
  504.  bit 4    can match on data as well as addresses
  505.  
  506. Bitfields for supported breakpoint types:
  507.  bit 0    memory read
  508.  bit 1    memory write
  509.  bit 2    memory read/write
  510.  bit 3    I/O read
  511.  bit 4    I/O write
  512.  bit 5    I/O read/write
  513.  bit 6    instruction fetch
  514.  
  515. Bitfields for supported addressing match modes:
  516.  bit 0    any address
  517.  bit 1    equal to test value
  518.  bit 2    not equal
  519.  bit 3    above test value
  520.  bit 4    below test value
  521.  bit 5    below or equal
  522.  bit 6    above or equal
  523.  bit 7    within range
  524.  bit 8    outside range
  525.  
  526. Bitfields for supported data matches:
  527.  bit 0    any data
  528.  bit 1    equal to test value
  529.  bit 2    not equal
  530.  bit 3    above test value
  531.  bit 4    below test value
  532.  bit 5    below or equal
  533.  bit 6    above or equal
  534.  bit 7    within range
  535.  bit 8    outside range
  536. --------N-213F-------------------------------
  537. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  538.     AH = 3Fh
  539.     BX = handle for character device "$IPCUST"
  540.     CX = number of bytes to read
  541.     DS:DX -> buffer for configuration data (see below)
  542. Return: CF clear if successful
  543.         AX = number of bytes actually read
  544.     CF set on error
  545.         AX = error code (05h,06h) (see AH=59h)
  546. Notes:    if less than the entire data is read or written, the next read/write
  547.       continues where the previous one ended; IOCTL calls AX=4402h and
  548.       AX=4403h both reset the location at which the next operation starts
  549.       to zero
  550.     the data pointer is also reset to zero if the previous read or write
  551.       reached or exceeded the end of the data, when the current function
  552.       is read and the previous was write, or vice versa
  553.     v2.1+ uses a new configuration method, but allows the installation
  554.       of IPCUST.SYS for backward compatibility with other software which
  555.       must read the PC/TCP configuration
  556. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST"
  557.  
  558. Format of configuration data:
  559. Offset    Size    Description
  560.  00h 12 BYTEs    IPCUST.SYS device driver header
  561.  12h    BYTE    ???
  562.  13h    BYTE    ???
  563.  14h    WORD    ???
  564.  16h    BYTE    bit flags
  565.         bit 0: send BS rather than DEL for BackSpace key
  566.         bit 1: wrap long lines
  567.  17h    BYTE    ???
  568.  18h 64 BYTEs    ASCIZ hostname
  569.  58h 64 BYTEs    ASCIZ domain name
  570.         (fully qualified domain name is hostname.domain-name)
  571.  98h 16 BYTEs    ASCIZ username
  572.  A8h 64 BYTEs    ASCIZ full name
  573.  E8h 64 BYTEs    ASCIZ office address
  574. 128h 32 BYTEs    ASCIZ phone number
  575. 148h    WORD    offset from GMT in minutes
  576. 14Ah  4 BYTEs    ASCIZ timezone name
  577. 14Eh    WORD    number of time servers
  578. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  579.     ???
  580. 164h    WORD    number of old-style name servers
  581. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  582. 172h    WORD    number of domain name servers
  583. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  584. 180h    DWORD    (big-endian) IP address of default gateway
  585. 184h    DWORD    (big-endian) IP address of log server
  586. 188h    DWORD    (big-endian) IP address of cookie server
  587. 18Ch    DWORD    (big-endian) IP address of lpr server
  588. 190h    DWORD    (big-endian) IP address of imagen print server
  589. 194h 54 BYTEs    ???
  590. 1E8h    WORD    TCP default window size in bytes
  591. 1EAh    WORD    TCP low window size
  592. 1ECh 64 BYTEs    ASCIZ host tabel filename
  593. 22Ch  2 BYTEs    ???
  594. 22Eh 80 BYTEs    ASCIZ mail relay host name
  595. 27Eh    BYTE    ???
  596. 27Fh    BYTE    ??? bit flags
  597. 280h 44 BYTEs    ???
  598. 2ACh    WORD    ???
  599. 2AEh 202 BYTEs    ???
  600. --------N-213F-------------------------------
  601. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  602.     AH = 3Fh
  603.     BX = file handle for device "NET$HLP$"
  604.     CX = 0008h
  605.     DS:DX -> buffer for entry point record (see AX=4402h"WORKGRP.SYS")
  606. Return: CF clear if successful
  607.         AX = number of bytes actually read (0 if at EOF before call)
  608.     CF set on error
  609.         AX = error code (05h,06h) (see AH=59h)
  610. Program: WORKGRP.SYS is distributed with MS-DOS 6.0 to permit communication
  611.       with PCs running Windows for Workgroups or LAN Manager
  612. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  613. --------D-2140-------------------------------
  614. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  615.     AH = 40h
  616.     BX = file handle
  617.     CX = number of bytes to write
  618.     DS:DX -> data to write
  619. Return: CF clear if successful
  620.         AX = number of bytes actually written
  621.     CF set on error
  622.         AX = error code (05h,06h) (see AH=59h)
  623. Notes:    if CX is zero, no data is written, and the file is truncated or
  624.       extended to the current position
  625.     data is written beginning at the current file position, and the file
  626.       position is updated after a successful write
  627.     the usual cause for AX < CX on return is a full disk
  628. BUG:    a write of zero bytes will appear to succeed when it actually failed
  629.       if the write is extending the file and there is not enough disk
  630.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  631.       whether the file was in fact extended by seeking to 0 bytes from
  632.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  633.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  634. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  635. --------G-2140-------------------------------
  636. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  637.     AH = 40h
  638.     BX = handle for character device "TDHDEBUG"
  639.     CX = number of bytes to write
  640.     DS:DX -> hardware breakpoint command (see below)
  641. Return: CF clear if successful
  642.         AX = number of bytes actually written
  643.     CF set on error
  644.         AX = error code (05h,06h) (see AH=59h)
  645. Note:    results are retrieved by reading from the device
  646. SeeAlso: AH=3Fh"Turbo Debug"
  647.  
  648. Format of hardware breakpoint commands:
  649. Offset    Size    Description
  650.  00h    BYTE    command code
  651.         00h install interrupt vectors
  652.         01h get hardware capabilities
  653.         02h enable hardware breakpoints
  654.         03h disable hardware breakpoints
  655.         04h set hardware breakpoint
  656.         05h clear hardware breakpoint
  657.         06h set I/O base address and reset hardware
  658.         07h restore interrupt vectors
  659. ---command code 00h---
  660.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  661.         hardware breakpoint; call with CPU state the same as on
  662.         the breakpoint except for pushing AX and placing an entry
  663.         code (FFh if breakout button or breakpoint handle) in AH
  664. ---command code 04h---
  665.  01h    BYTE    breakpoint type
  666.         00h memory read
  667.         01h memory write
  668.         02h memory read/write
  669.         03h I/O read
  670.         04h I/O write
  671.         05h I/O read/write
  672.         06h instruction fetch
  673.  02h    BYTE    address matching mode
  674.         00h any address
  675.         01h equal to test value
  676.         02h different from test value
  677.         03h above test value
  678.         04h below test value
  679.         05h below or equal to test value
  680.         06h above or equal to test value
  681.         07h within inclusive range
  682.         08h outside specified range
  683.  03h    DWORD    32-bit linear low address
  684.  07h    DWORD    32-bit linear high address
  685.  0Bh    WORD    pass count
  686.  0Dh    BYTE    data size (01h, 02h, or 04h)
  687.  0Eh    BYTE    source of matched bus cycle
  688.         01h CPU
  689.         02h DMA
  690.         03h either
  691.  0Fh    BYTE    data-matching mode
  692.         00h match any
  693.         01h equal to test value
  694.         02h different from test value
  695.         03h above test value
  696.         04h below test value
  697.         05h below or equal to test value
  698.         06h above or equal to test value
  699.         07h within specified range
  700.         08h outside specified range
  701.  10h    DWORD    low data value
  702.  14h    DWORD    high data value
  703.  18h    DWORD    data mask specifying which bits of the data are tested
  704. ---command code 05h---
  705.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  706.         04h)
  707. ---command code 06h---
  708.  01h    WORD    base address of hardware debugger board
  709. --------N-2140-------------------------------
  710. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  711.     AH = 40h
  712.     BX = handle for character device "$IPCUST"
  713.     CX = number of bytes to write
  714.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  715. Return: CF clear if successful
  716.         AX = number of bytes actually written
  717.     CF set on error
  718.         AX = error code (05h,06h) (see AH=59h)
  719. Notes:    if less than the entire data is read or written, the next read/write
  720.       continues where the previous one ended; IOCTL calls AX=4402h and
  721.       AX=4403h both reset the location at which the next operation starts
  722.       to zero
  723.     the data pointer is also reset to zero if the previous read or write
  724.       reached or exceeded the end of the data, when the current function
  725.       is read and the previous was write, or vice versa
  726.     v2.1+ uses a new configuration method, but allows the installation
  727.       of IPCUST.SYS for backward compatibility with other software which
  728.       must read the PC/TCP configuration
  729. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  730. --------j-214000BX0002-----------------------
  731. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  732.     AX = 4000h
  733.     BX = 0002h
  734.     CX = 0000h
  735.     DS:DX = 0000h:0000h
  736. Return: CF clear if installed
  737.         AX = CS of resident code
  738. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  739.       noises when programs output a bell
  740. SeeAlso: AX=4001h
  741. --------j-214001BX0002-----------------------
  742. INT 21 - FARTBELL.EXE - FORCE NOISE
  743.     AX = 4001h
  744.     BX = 0002h
  745.     CX = 0000h
  746.     DS:DX = 0000h:0000h
  747. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  748.       noises when programs output a bell
  749. SeeAlso: AX=4000h
  750. --------D-2141-------------------------------
  751. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  752.     AH = 41h
  753.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  754.     CL = attribute mask for deletion (server call only, see below)
  755. Return: CF clear if successful
  756.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  757.     CF set on error
  758.         AX = error code (02h,03h,05h) (see AH=59h)
  759. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  760.       the filespec must be canonical (as returned by AH=60h), and only
  761.       files matching the attribute mask in CL are deleted
  762.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  763.     DOS does not erase the file's data; it merely becomes inaccessible
  764.       because the FAT chain for the file is cleared
  765.     deleting a file which is currently open may lead to filesystem
  766.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  767.       referencing the deleted file, thus allowing writes to a nonexistant
  768.       file.
  769.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  770.       is currently open
  771.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  772. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  773. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AX=F244h,INT 2F/AX=1113h
  774. --------y-214101DXFFFE-----------------------
  775. INT 21 - SoftLogic Data Guardian - ???
  776.     AX = 4101h
  777.     DX = FFFEh
  778. Return: AX = 0000h if installed
  779. Note:    resident code sets several internal variables on this call
  780. --------D-2142-------------------------------
  781. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  782.     AH = 42h
  783.     AL = origin of move
  784.         00h start of file
  785.         01h current file position
  786.         02h end of file
  787.     BX = file handle
  788.     CX:DX = offset from origin of new file position
  789. Return: CF clear if successful
  790.         DX:AX = new file position in bytes from start of file
  791.     CF set on error
  792.         AX = error code (01h,06h) (see AH=59h)
  793. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  794.       start of the file; no error is returned in that case, but subsequent
  795.       attempts at I/O will produce errors
  796.     if the new position is beyond the current end of file, the file will
  797.       be extended by the next write (see AH=40h)
  798. BUG:    using this method to grow a file from zero bytes to a very large size
  799.       can corrupt the FAT in some versions of DOS; the file should first
  800.       be grown from zero to one byte and then to the desired large size
  801. SeeAlso: AH=24h,INT 2F/AX=1228h
  802. --------v-214203-----------------------------
  803. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  804.     AX = 4203h
  805. Return: AX = 1234h if resident
  806. SeeAlso: AX=3DFFh,AX=4243h
  807. --------v-214243-----------------------------
  808. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  809.     AX = 4243h
  810. Return: AX = 5678h if resident
  811. SeeAlso: AX=4203h,AX=4B04h
  812. --------D-214300-----------------------------
  813. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  814.     AX = 4300h
  815.     DS:DX -> ASCIZ filename
  816. Return: CF clear if successful
  817.         CX = file attributes (see AX=4301h)
  818.         AX = CX (DR-DOS 5.0)
  819.     CF set on error
  820.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  821. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  822.     under DR-DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  823.       simply ignored without an error
  824. SeeAlso: AX=4301h,AX=4310h,AH=B6h,INT 2F/AX=110Fh
  825. --------D-214301-----------------------------
  826. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  827.     AX = 4301h
  828.     CX = new file attributes (see below)
  829.     DS:DX -> ASCIZ filename
  830. Return: CF clear if successful
  831.         AX destroyed
  832.     CF set on error
  833.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  834. Notes:    will not change volume label or directory attribute bits, but will
  835.       change the other attribute bits of a directory (the directory
  836.       bit must be cleared to successfully change the other attributes of a
  837.       directory, but the directory will not be changed to a normal file as
  838.       a result)
  839.     MS-DOS 4.01 reportedly closes the file if it is currently open
  840.     for security reasons, the Novell NetWare execute-only bit can never
  841.       be cleared; the file must be deleted and recreated
  842.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  843.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  844.       compatibility mode, otherwise a sharing violation critical error is
  845.       generated if the file is currently open
  846. SeeAlso: AX=4300h,AX=4311h,INT 2F/AX=110Eh
  847.  
  848. Bitfields for file attributes:
  849.  bit 7    shareable (Novell NetWare)
  850.  bit 6    unused
  851.  bit 5    archive
  852.  bit 4    directory
  853.  bit 3    volume label
  854.      execute-only (Novell NetWare)
  855.  bit 2    system
  856.  bit 1    hidden
  857.  bit 0    read-only
  858. --------O-214302-----------------------------
  859. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  860.     AX = 4302h
  861.     DS:DX -> ASCIZ pathname
  862. Return: CF clear if successful
  863.         CX = access rights (see below)
  864.         AX = CX (DR-DOS 5.0)
  865.     CF set on error
  866.         AX = error code
  867. Desc:    Determine which operations the calling program may perform on a
  868.       specified file without being required to provide a password.
  869. Notes:    this protection scheme has been coordinated on all current Digital
  870.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  871.       FlexOS 2+)
  872.     this function is documented in DR-DOS 6.0 and corresponds to the
  873.       "Get/Set File Attributes" function, subfunction 2, documented in
  874.       Concurrent DOS.
  875.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  876.       them as "read" bits.
  877.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  878.       DRMDOS 5.x security system allowing for users and groups uses bits
  879.       4-11.
  880. SeeAlso: AX=4303h
  881.  
  882. Bitfields for access rights:
  883.  bit 0    owner delete requires password
  884.  bit 1    owner execution requires password (FlexOS)
  885.  bit 2    owner write requires password
  886.  bit 3    owner read requires password
  887.  bit 4    group delete requires password
  888.  bit 5    group execution requires password (FlexOS)
  889.  bit 6    group write requires password
  890.  bit 7    group read requires password
  891.  bit 8    world delete requires password
  892.  bit 9    world execution requires password (FlexOS)
  893.  bit 10 world write requires password
  894.  bit 11 world read requires password
  895. --------O-214303-----------------------------
  896. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  897.     AX = 4303h
  898.     CX = access rights
  899.          bits 11-0: access rights (see AX=4302h)
  900.          bit 15: new password is to be set
  901.     DS:DX -> ASCIZ pathname
  902.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  903. Return: CF clear if successful
  904.     CF set on error
  905.         AX = error code
  906. Notes:    if the file is already protected, the old password must be added after
  907.       the pathname, separated by a ";"
  908.     this function is documented in DR-DOS 6.0 and corresponds to the
  909.       "Get/Set File Attributes" function, subfunction 3, documented in
  910.       Concurrent DOS.
  911. SeeAlso: AH=0Fh,AH=17h,AX=4302h,AX=4305h,AX=4454h
  912. --------O-214304-----------------------------
  913. INT 21 U - DR-DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  914.     AX = 4304h
  915.     ???
  916. Return: CF clear if successful
  917.         CX = AX = ???
  918.     CF set on error
  919.         AX = error code (see AH=59h)
  920. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  921. SeeAlso: AX=4303h,AX=4305h
  922. --------O-214305-----------------------------
  923. INT 21 U - DR-DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  924.     AX = 4305h
  925.     ???
  926. Return: CF clear if successful
  927.     CF set on error
  928.         AX = error code (see AH=59h)
  929. Desc:    this function allows the extended attributes, and optionally the
  930.       encrypted password, of a file to be set.
  931. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  932. SeeAlso: AX=4304h,AX=4311h
  933. --------O-214306-----------------------------
  934. INT 21 - DR-DOS 6.0 - GET FILE OWNER
  935.     AX = 4306h
  936.     ???
  937. Return: ???
  938. SeeAlso: AX=4307h
  939. --------O-214307-----------------------------
  940. INT 21 - DR-DOS 6.0 - SET FILE OWNER
  941.     AX = 4307h
  942.     ???
  943. Return: ???
  944. SeeAlso: AX=4306h
  945. --------N-214310-----------------------------
  946. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  947.     AX = 4310h
  948.     DS:DX -> ASCIZ filename
  949. Return: CF clear if successful
  950.         CH = attributes (see AX=4311h)
  951.     CF set on error
  952.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  953. Note:    the filename may be a directory but must be on a VINES file service
  954. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  955. --------N-214311-----------------------------
  956. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  957.     AX = 4311h
  958.     CH = new attributes
  959.         bit 7: unused
  960.         bit 6: shareable
  961.         bit 5: execute-only
  962.         bits 4-0: unused
  963.     DS:DX -> ASCIZ filename
  964. Return: CF clear if successful
  965.     CF set on error
  966.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  967. Note:    the filename may be a directory but must be on a VINES file service
  968. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  969. ----------214380-----------------------------
  970. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  971.     AX = 4380h
  972.     ???
  973. Return: ???
  974. SeeAlso: AH=41h,AX=4381h
  975. ----------214381-----------------------------
  976. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  977.     AX = 4381h
  978.     ???
  979. Return: ???
  980. SeeAlso: AH=41h,AX=4380h
  981. --------D-214400-----------------------------
  982. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  983.     AX = 4400h
  984.     BX = handle
  985. Return: CF clear if successful
  986.         DX = device information word (see below)
  987.         AX destroyed
  988.     CF set on error
  989.         AX = error code (01h,05h,06h) (see AH=59h)
  990. Notes:    value in DH corresponds to high byte of device driver's attribute word
  991.       if handle refers to a character device
  992.     Novell NetWare reportedly does not return a drive number in bits 5-0
  993.       for a disk file
  994. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  995.  
  996. Bitfields for device information word:
  997.  character device
  998.   bit 14: device driver can process IOCTL requests (see AX=4402h)
  999.   bit 13: output until busy supported
  1000.   bit 11: driver supports OPEN/CLOSE calls
  1001.   bit  7: set (indicates device)
  1002.   bit  6: EOF on input
  1003.   bit  5: raw (binary) mode
  1004.   bit  4: device is special (uses INT 29)
  1005.   bit  3: clock device
  1006.   bit  2: NUL device
  1007.   bit  1: standard output
  1008.   bit  0: standard input
  1009.  disk file
  1010.   bit 15: file is remote (DOS 3+)
  1011.   bit 14: don't set file date/time on closing (DOS 3+)
  1012.   bit 11: media not removable
  1013.   bit  8: (DOS 4 only) generate INT 24 if no disk space on write or read past
  1014.         end of file
  1015.   bit  7: clear (indicates file)
  1016.   bit  6: file has not been written
  1017.   bits 5-0: drive number (0 = A:)
  1018. --------D-214401-----------------------------
  1019. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  1020.     AX = 4401h
  1021.     BX = handle (must refer to character device)
  1022.     DX = device information word (see AX=4400h)
  1023.         (DH must be zero)
  1024. Return: CF clear if successful
  1025.     CF set on error
  1026.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1027. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  1028. --------D-214402-----------------------------
  1029. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  1030.     AX = 4402h
  1031.     BX = file handle referencing character device
  1032.     CX = number of bytes to read
  1033.     DS:DX -> buffer
  1034. Return: CF clear if successful
  1035.         AX = number of bytes actually read
  1036.     CF set on error
  1037.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1038. Note:    format of data is driver-specific (see below for some specific cases)
  1039. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  1040. --------N-214402-----------------------------
  1041. INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER
  1042.     AX = 4402h
  1043.     BX = file handle for device "PROTMAN$"
  1044.     DS:DX -> request block (see below)
  1045.     CX = 000Eh (size of request block)
  1046.  
  1047. Format of request block for GetProtocolManagerInfo:
  1048. Offset    Size    Description
  1049.  00h    WORD    01h
  1050.  02h    WORD    returned status (see below)
  1051.  04h    DWORD    returned pointer to structure representing parsed user config
  1052.  08h    DWORD    unused
  1053.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  1054.  
  1055. Format of request block for RegisterModule:
  1056. Offset    Size    Description
  1057.  00h    WORD    02h
  1058.  02h    WORD    returned status (see below)
  1059.  04h    DWORD    pointer to module's common characteristics table (see below)
  1060.  08h    DWORD    pointer to list of modules to which the module is to be bound
  1061.  0Ch    WORD    unused
  1062.  
  1063. Format of request block for BindAndStart:
  1064. Offset    Size    Description
  1065.  00h    WORD    03h
  1066.  02h    WORD    returned status (see below)
  1067.  04h    DWORD    caller's virtual address in FailingModules structure
  1068.  08h    DWORD    unused
  1069.  0Ch    WORD    unused
  1070.  
  1071. Format of request block for GetProtocolManagerLinkage:
  1072. Offset    Size    Description
  1073.  00h    WORD    04h
  1074.  02h    WORD    returned status (see below)
  1075.  04h    DWORD    returned dispatch point
  1076.  08h    DWORD    unused
  1077.  0Ch    WORD    returned protocol manager DS
  1078. Note:    the dispatch point may be called as follows instead of using this IOCTL
  1079.     STACK: WORD  protocol manager DS
  1080.            DWORD pointer to request block
  1081.     Return: AX = returned status
  1082.         STACK popped
  1083.  
  1084. Format of request block for GetProtocolIniPath:
  1085. Offset    Size    Description
  1086.  00h    WORD    05h
  1087.  02h    WORD    returned status (see below)
  1088.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  1089.  08h    DWORD    unused
  1090.  0Ch    WORD    buffer length
  1091.  
  1092. Format of request block for RegisterProtocolManagerInfo:
  1093. Offset    Size    Description
  1094.  00h    WORD    06h
  1095.  02h    WORD    returned status (see below)
  1096.  04h    DWORD    pointer to structure containing parsed user config file
  1097.  08h    DWORD    unused
  1098.  0Ch    WORD    length of structure
  1099.  
  1100. Format of request block for InitAndRegister:
  1101. Offset    Size    Description
  1102.  00h    WORD    07h
  1103.  02h    WORD    returned status (see below)
  1104.  04h    DWORD    unused
  1105.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  1106.  0Ch    WORD    unused
  1107.  
  1108. Format of request block for UnbindAndStop:
  1109. Offset    Size    Description
  1110.  00h    WORD    08h
  1111.  02h    WORD    returned status (see below)
  1112.  04h    DWORD    failing modules as for BindAndStart
  1113.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  1114.         if 0000h:0000h, terminate a set of previously dynamically
  1115.           bound protocol modules
  1116.  0Ch    WORD    unused
  1117.  
  1118. Format of request block for BindStatus:
  1119. Offset    Size    Description
  1120.  00h    WORD    09h
  1121.  02h    WORD    returned status (see below)
  1122.  04h    DWORD    must be 0000h:0000h
  1123.         on return, points to root tree
  1124.  08h    DWORD    0000h:0000h
  1125.  0Ch    WORD    unused under DOS
  1126.  
  1127. Format of request block for RegisterStatus:
  1128. Offset    Size    Description
  1129.  00h    WORD    0Ah
  1130.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  1131.  04h    DWORD    0000h:0000h
  1132.  08h    DWORD    pointer to 16-byte ASCIZ module name
  1133.  0Ch    WORD    0000h
  1134. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  1135.  
  1136. Values of status code:
  1137.  0000h success
  1138.  0001h wait for release--protocol has retained control of the data buffer
  1139.  0002h request queued
  1140.  0003h frame not recognized
  1141.  0004h frame rejected
  1142.  0005h frame should be forwarded
  1143.  0006h out of resource
  1144.  0007h invalid parameter
  1145.  0008h invalid function
  1146.  0009h not supported
  1147.  000Ah hardware error
  1148.  000Bh transmit error
  1149.  000Ch unrecognized destination
  1150.  000Dh buffer too small
  1151.  0020h already started
  1152.  0021h binding incomplete
  1153.  0022h driver not initialized
  1154.  0023h hardware not found
  1155.  0024h hardware failure
  1156.  0025h configuration failure
  1157.  0026h interrupt conflict
  1158.  0027h MAC incompatible
  1159.  0028h initialization failed
  1160.  0029h no binding
  1161.  002Ah network may be disconnected
  1162.  002Bh incompatible OS version
  1163.  002Ch already registered
  1164.  002Dh path not found
  1165.  002Eh insufficient memory
  1166.  002Fh info not found
  1167.  00FFh general failure
  1168.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  1169.  
  1170. Format of common characteristics table:
  1171. Offset    Size    Description
  1172.  00h    WORD    size of table in bytes
  1173.  02h    BYTE    NDIS major version
  1174.  03h    BYTE    NDIS minor version
  1175.  04h    WORD    reserved
  1176.  06h    BYTE    module major version
  1177.  07h    BYTE    module minor version
  1178.  08h    DWORD    module function flag bits
  1179.         bit 0: binding at upper boundary supported
  1180.         bit 1: binding at lower boundary supported
  1181.         bit 2: dynamically bound
  1182.         bits 3-31 reserved, must be 0
  1183.  0Ch 16 BYTEs    ASCIZ module name
  1184.  1Ch    BYTE    upper boundary protocol level (see below)
  1185.  1Dh    BYTE    upper boundary interface type
  1186.         for MACs: 1 = MAC
  1187.         for data links and transports: to be defined
  1188.         for session: 1 = NCB
  1189.         any level: 0 = private (ISV-defined)
  1190.  1Eh    BYTE    lower boundary protocol level (see below)
  1191.  1Fh    BYTE    lower boundary interface type
  1192.         same as offset 1Dh
  1193.  20h    WORD    module ID filled in by protocol manager
  1194.  22h    WORD    module DS
  1195.  24h    DWORD    system request entry point
  1196.  28h    DWORD    pointer to service-specific characteristics
  1197.          0000h:0000h if none
  1198.  2Ch    DWORD    pointer to service-specific status, or 0000h:0000h if none
  1199.  30h    DWORD    pointer to upper dispatch table (see below)
  1200.         0000h:0000h if none
  1201.  34h    DWORD    pointer to lower dispatch table (see below)
  1202.         0000h:0000h if none
  1203.  38h  2 DWORDs    reserved, must be 0
  1204. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  1205.       interpreted as 01h
  1206.  
  1207. Values for boundary protocol level:
  1208.  00h physical
  1209.  01h Media Access Control
  1210.  02h Data link
  1211.  03h network
  1212.  04h transport
  1213.  05h session
  1214.  FFh not specified
  1215.  
  1216. Format of MAC Service-Specific Characteristics Table:
  1217. Offset    Size    Description
  1218.  00h    WORD    length of table in bytes
  1219.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  1220.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  1221.         "HDLC", or "ISDN"
  1222.  12h    WORD    length of station addresses in bytes
  1223.  14h 16 BYTEs    permanent station address
  1224.  24h 16 BYTEs    current station address
  1225.  34h    DWORD    current functional adapter address (00000000h if none)
  1226.  38h    DWORD    pointer to multicast address list
  1227.  3Ch    DWORD    link speed in bits/sec
  1228.  40h    DWORD    service flags (see below)
  1229.  44h    WORD    maximum frame size which may be both sent and received
  1230.  46h    DWORD    total transmit buffer capacity in bytes
  1231.  4Ah    WORD    transmit buffer allocation block size in bytes
  1232.  4Ch    DWORD    total receive buffer capacity in bytes
  1233.  50h    WORD    receive buffer allocation block size in bytes
  1234.  52h  3 BYTEs    IEEE vendor code
  1235.  55h    BYTE    vendor adapter code
  1236.  56h    DWORD    pointer to ASCIZ vendor adapter description
  1237.  5Ah    WORD    IRQ used by adapter
  1238.  5Ch    WORD    transmit queue depth
  1239.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  1240.  60h  N BYTEs    vendor-specific info
  1241.  
  1242. Bitfields for service flags:
  1243.  bit 0    supports broadcast
  1244.  bit 1    supports multicast
  1245.  bit 2    supports functional/group addressing
  1246.  bit 3    supports promiscuous mode
  1247.  bit 4    station address software settable
  1248.  bit 5    statistics always current
  1249.  bit 6    supports InitiateDiagnostics
  1250.  bit 7    supports loopback
  1251.  bit 8    MAC does primarily ReceiveChain indications instead of ReceiveLookahead
  1252.      indications
  1253.  bit 9    supports IBM source routing
  1254.  bit 10    supports MAC reset
  1255.  bit 11    supports Open/Close adapter
  1256.  bit 12    supports interrupt request
  1257.  bit 13    supports source routing bridge
  1258.  bit 14    supports GDT virtual addresses (OS/2 version)
  1259.  bit 15    multiple TransferDatas allowed durign a single indication
  1260.  bit 16    MAC normally sets FrameSize = 0 in ReceiveLookahead
  1261.  bit 17-31 reserved, must be 0
  1262.  
  1263. Format of NetBIOS Service-Specific Characteristics Table
  1264. Offset    Size    Description
  1265.  00h    WORD    length of table in bytes
  1266.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  1267.  12h    WORD    NetBIOS module code
  1268.  14h  N BYTEs    vendor-specific info
  1269.  
  1270. Format of MAC Service-Specific Status Table:
  1271. Offset    Size    Description
  1272.  00h    WORD    length of table in bytes
  1273.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  1274.         (FFFFFFFFh = never)
  1275.  06h    DWORD    MAC status bits (see below)
  1276.  0Ah    WORD    current packet filter flags
  1277.         bit 0: directed/multicast or group/functional
  1278.         bit 1: broadcast
  1279.         bit 2: promiscuous
  1280.         bit 3: all source routing
  1281.         bits 4-15: reserved, must be zero
  1282.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  1283.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  1284.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  1285.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  1286.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  1287.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  1288.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  1289.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  1290.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  1291.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  1292.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  1293.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  1294.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  1295.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  1296.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  1297.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  1298.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  1299.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  1300.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  1301.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  1302.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  1303.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  1304.  64h  N BYTEs    vendor-specific info
  1305.  
  1306. Bitfields for MAC status bits:
  1307.  bits 0-2    operational status
  1308.         000 hardware not installed
  1309.         001 hardware failed startup diagnostics
  1310.         010 hardware configuration problem
  1311.         011 hardware fault
  1312.         100 operating marginally due to soft faults
  1313.         101 reserved
  1314.         110 reserved
  1315.         111 hardware fully operational
  1316.  bit 3    MAC bound
  1317.  bit 4    MAC open
  1318.  bit 5    diagnostics in progress
  1319.  bits 6-31 reserved
  1320. --------I-214402-----------------------------
  1321. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  1322.     AX = 4402h
  1323.     BX = handle for character device "GDMS"
  1324.     CX = number of bytes to read (>= 4)
  1325.     DS:DX -> buffer (see below)
  1326. Return: CF set on error
  1327.         AX = error code (see AH=59h)
  1328.     CF clear if successful
  1329.         AX = number of bytes read
  1330.  
  1331. Format of returned data:
  1332. Offset    Size    Description
  1333.  00h  4 BYTEs    ???
  1334.  04h    DWORD    pointer to ???
  1335.  08h  4 BYTEs    ???
  1336. --------m-214402-----------------------------
  1337. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  1338.     AX = 4402h
  1339.     BX = handle for device "LA$TBYTE"
  1340.     CX = 0004h
  1341.     DS:DX -> DWORD to hold address of 39-byte table of ???
  1342. Return: CF set on error
  1343.         AX = error code (see AH=59h)
  1344.     CF clear if successful
  1345.         AX = number of bytes read
  1346. Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
  1347.       management package by Key Software Products
  1348. SeeAlso: AX=4402h"HIGHUMM"
  1349. --------m-214402-----------------------------
  1350. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  1351.     AX = 4402h
  1352.     BX = handle for device "KSP$UMM"
  1353.     CX = 0004h
  1354.     DS:DX -> DWORD to hold entry point
  1355. Return: CF set on error
  1356.         AX = error code (see AH=59h)
  1357.     CF clear if successful
  1358.         AX = number of bytes read
  1359. Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management
  1360.       package by Key Software Products
  1361. SeeAlso: AX=4402h"LASTBYTE"
  1362.  
  1363. Call HIGHUMM.SYS entry point with:
  1364.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  1365.         DX = size in paragraphs
  1366.         Return: BX = segment number (if successful)
  1367.             DX = size of requested block/size of largest block
  1368.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  1369.         DX = segment number of UMB
  1370.     AH = 02h request a bank-switched memory block
  1371.         DX = size in paragraphs
  1372.         Return: BX = segment number (if successful)
  1373.             DX = size of requested block/size of largest block
  1374.     AH = 03h release a bank-switched memory block
  1375.         DX = segment number
  1376.     AH = 04h transfer data to/from high memory
  1377.         DS:SI -> source
  1378.         ES:DI -> destination
  1379.         CX = length in bytes
  1380.         Note: enables bank-switched memory, does the copy, then disables
  1381.         bank-switched memory
  1382.     AH = 05h get a word from bank-switched memory
  1383.         ES:DI -> word to read
  1384.         Return: DX = word
  1385.     AH = 06h put a word to bank-switched memory
  1386.         ES:DI -> word to write
  1387.         DX = word
  1388.     AH = 07h put a byte to bank-switched memory
  1389.         ES:DI -> byte to write
  1390.         DL = byte
  1391.     AH = 08h enable bank-switched memory
  1392.         DS:SI -> 6-byte status save area
  1393.     AH = 09h disable bank-switched memory
  1394.         DS:SI -> 6-byte save area from enable call (AH=08h)
  1395.     AH = 0Ah assign name to UMB or high bank-switched block
  1396.         DX = segment number
  1397.         DS:SI -> 8-byte blank-padded name
  1398.     AH = 0Bh locate UMB block by name
  1399.         DS:SI -> 8-byte blank-padded name
  1400.         Return: BX = segment number (if successful)
  1401.             DX = size of block
  1402.     AH = 0Ch locate bank-switched block by name
  1403.         DS:SI -> 8-byte blank-padded name
  1404.         Return: BX = segment number (if successful)
  1405.             DX = size of block
  1406. Return: AX = status code
  1407.         0001h successful
  1408.         0000h failed
  1409.         BL = error code
  1410.             80h not implemented
  1411.             B0h insufficient memory, smaller block available
  1412.             B1h insufficient memory, no blocks available
  1413.             B2h invalid segment number
  1414. Note:    only functions 00h and 01h are always available; the remaining
  1415.       functions are only enabled if the proper commandline switch is given
  1416. --------c-214402-----------------------------
  1417. INT 21 - SMARTDRV.SYS - IOCTL - GET CACHE STATUS
  1418.     AX = 4402h
  1419.     BX = file handle for device "SMARTAAR"
  1420.     CX = number of bytes to read (min 28h)
  1421.     DS:DX -> buffer for status record (see below)
  1422. Return: CF clear if successful
  1423.         AX = number of bytes actually read
  1424.     CF set on error
  1425.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1426. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  1427.  
  1428. Format of SMARTDRV status record:
  1429. Offset    Size    Description
  1430.  00h    BYTE    write-through flag (always 01h)
  1431.  01h    BYTE    writes should be buffered (always 00h)
  1432.  02h    BYTE    cache enabled if 01h
  1433.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  1434.  04h    WORD    clock ticks between cache flushes (currently unused)
  1435.  06h    BYTE    cache contains locked tracks if nonzero
  1436.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  1437.  08h    BYTE    cache full track writes if nonzero
  1438.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  1439.  0Ah    DWORD    original INT 13 vector
  1440.  0Eh    BYTE    minor version number
  1441.  0Fh    BYTE    major version number
  1442.  10h    WORD    unused
  1443.  12h    WORD    sectors read            \
  1444.  14h    WORD    sectors already in cache     > may be scaled rather than
  1445.  16h    WORD    sectors already in track buffer /  absolute counts
  1446.  18h    BYTE    cache hit rate in percent
  1447.  19h    BYTE    track buffer hit rate in percent
  1448.  1Ah    WORD    total tracks in cache
  1449.  1Ch    WORD    number of tracks in use
  1450.  1Eh    WORD    number of locked tracks
  1451.  20h    WORD    number of dirty tracks
  1452.  22h    WORD    current cache size in 16K pages
  1453.  24h    WORD    original (maximum) cache size in 16K pages
  1454.  26h    WORD    minimum cache size in 16K pages
  1455.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  1456. --------d-214402-----------------------------
  1457. INT 21 - CD-ROM device driver - IOCTL INPUT
  1458.     AX = 4402h
  1459.     BX = file handle referencing character device for CD-ROM driver
  1460.     CX = number of bytes to read
  1461.     DS:DX -> control block (see below)
  1462. Return: CF clear if successful
  1463.         AX = number of bytes actually read
  1464.     CF set on error
  1465.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1466. Note:    the data returned depends on the first byte of the control block; the
  1467.       remainder of the control block is filled by the driver
  1468. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  1469.  
  1470. Values for data being requested:
  1471.  00h device driver header address
  1472.  01h drive head location
  1473.  02h reserved
  1474.  03h error statistics
  1475.  04h audio channel info
  1476.  05h raw drive bytes (uninterpreted and device-specific)
  1477.  06h device status
  1478.  07h sector size
  1479.  08h volume size
  1480.  09h media change status
  1481.  0Ah audio disk info
  1482.  0Bh audio track info
  1483.  0Ch audio Q-Channel info
  1484.  0Dh audio sub-channel info
  1485.  0Eh UPC code
  1486.  
  1487. Format of control block:
  1488. Offset    Size    Description
  1489.  00h    BYTE    data being requested (see above)
  1490. ---function 00h---
  1491.  01h    DWORD    device driver header address (see also AH=52h)
  1492. ---function 01h---
  1493.  01h    BYTE    addressing mode
  1494.         00h HSG
  1495.         01h Red Book
  1496.  02h    DWORD    current location of drive's head
  1497.         logical sector number in HSG mode
  1498.         frame/second/minute/unused in Red Book mode
  1499.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1500. ---function 03h---
  1501.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  1502. ---function 04h---
  1503.  01h    BYTE    input channel (0-3) for output channel 0
  1504.  02h    BYTE    volume for output channel 0
  1505.  03h    BYTE    input channel (0-3) for output channel 1
  1506.  04h    BYTE    volume for output channel 1
  1507.  05h    BYTE    input channel (0-3) for output channel 2
  1508.  06h    BYTE    volume for output channel 2
  1509.  07h    BYTE    input channel (0-3) for output channel 3
  1510.  08h    BYTE    volume for output channel 3
  1511. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  1512.       right prime; a volume of 00h is off
  1513.     the default setting is for each input channel to be assigned to the
  1514.       same-numbered output channel at full (FFh) volume
  1515. ---function 05h---
  1516.  01h    BYTE    number of bytes read
  1517.  02h 128 BYTEs    buffer for drive bytes
  1518. ---function 06h---
  1519.  01h    DWORD    device parameters (see below)
  1520. ---function 07h---
  1521.  01h    BYTE    read mode
  1522.         00h cooked
  1523.         01h raw
  1524.  02h    WORD    sector size in bytes
  1525. ---function 08h---
  1526.  01h    DWORD    volume size in sectors
  1527. ---function 09h---
  1528.  01h    BYTE    media change status
  1529.         00h don't know
  1530.         01h media unchanged
  1531.         FFh media has been changed
  1532. ---function 0Ah---
  1533.  01h    BYTE    lowest audio track number
  1534.  02h    BYTE    highest audio track number
  1535.  03h    DWORD    start address of lead-out track (Red Book format)
  1536. --function 0Bh---
  1537.  01h    BYTE    track number (set by caller)
  1538.  02h    DWORD    starting point of track (Red Book format)
  1539.  06h    BYTE    track control info
  1540.         bits 15,14,12: track type (notice: bits not contiguous!)
  1541.             000 two audio channels, no pre-emphasis
  1542.             001 two audio channels with pre-emphasis
  1543.             010 data track
  1544.             100 four audio channels, no pre-emphasis
  1545.             101 four audio channels with pre-emphasis
  1546.             other reserved
  1547.         bit 13: digital copy permitted
  1548. ---function 0Ch---
  1549.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  1550.  02h    BYTE    track number
  1551.  03h    BYTE    point or index
  1552.  04h    BYTE    minute    \
  1553.  05h    BYTE    second     > running time within track
  1554.  06h    BYTE    frame    /
  1555.  07h    BYTE    zero
  1556.  08h    BYTE    "AMIN" or "PMIN"     \
  1557.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  1558.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  1559. ---function 0Dh---
  1560.  01h    DWORD    starting frame address (Red Book format)
  1561.  05h    DWORD    transfer address
  1562.  09h    DWORD    number of sectors to read
  1563. Note:    copies 96 bytes of sub-channel info per sector into buffer
  1564. ---function 0Eh---
  1565.  01h    BYTE    CONTROL and ADR byte
  1566.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  1567.  09h    BYTE    zero
  1568.  0Ah    BYTE    "AFRAME"
  1569.  
  1570. Bitfields for device parameters:
  1571.  bit 0    door open
  1572.  bit 1    door unlocked
  1573.  bit 2    supports raw reading in addition to cooked
  1574.  bit 3    writable
  1575.  bit 4    can play audio/video tracks
  1576.  bit 5    supports interleaving
  1577.  bit 6    reserved
  1578.  bit 7    supports prefetch requests
  1579.  bit 8    supports audio channel control
  1580.  bit 9    supports Red Book addressing in addition to HSG
  1581.  bit 10    audio is playing
  1582. --------m-214402-----------------------------
  1583. INT 21 U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  1584.     AX = 4402h
  1585.     BX = file handle for device "QEMM386$"
  1586.     CX = 0004h
  1587.     DS:DX -> DWORD buffer for API entry point
  1588. Return: CF clear if successful
  1589.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  1590.     CF set on error
  1591.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1592. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  1593. --------m-214402-----------------------------
  1594. INT 21 U - Quarterdeck - QEMM-386 v6+ - GET EMM IMPORT STRUCTURE ADDRESS
  1595.     AX = 4402h
  1596.     BX = file handle for device "EMMXXXX0"
  1597.     CX = 0006h (size of buffer in bytes)
  1598.     DS:DX -> buffer for import structure address (see below)
  1599.         first byte must be 01h on entry
  1600. Return: CF clear if successful
  1601.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  1602.     CF set on error
  1603.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1604. Note:    this call always returns an error if Windows3 support has been disabled
  1605.       with the NW3 switch to QEMM386.SYS
  1606. SeeAlso: INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  1607.  
  1608. Format of import structure address:
  1609. Offset    Size    Description
  1610.  00h    DWORD    physical address of EMM import structure
  1611.  04h    BYTE    major version
  1612.  05h    BYTE    minor version
  1613. --------Q-214402-----------------------------
  1614. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  1615.     AX = 4402h
  1616.     BX = file handle for device "HOOKROM$"
  1617.     CX = 0004h
  1618.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  1619. Return: CF clear if successful
  1620.         DS:DX buffer filled
  1621.     CF set on error
  1622.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1623. SeeAlso: AX=4402h"QEMM"
  1624.  
  1625. Format of hooked vector table entry:
  1626. Offset    Size    Description
  1627.  00h  5 BYTEs    FAR jump to actual interrupt handler
  1628.         (end of table if first byte is not EAh)
  1629.  05h    BYTE    interrupt vector number
  1630. --------m-214402-----------------------------
  1631. INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
  1632.     AX = 4402h
  1633.     BX = file handle for device "EMMXXXX0"
  1634.     CX = size of buffer in bytes (varies, see below)
  1635.     DS:DX -> buffer for returned data (see below)
  1636.         first byte must be set on entry to indicate desired data
  1637. Return: CF clear if successful
  1638.         buffer filled
  1639.     CF set on error
  1640.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1641. Note:    an error is returned if the number of bytes to be read does not match
  1642.       the number of bytes returned for the specified data item
  1643. SeeAlso: INT 67/AX=FFA5h
  1644.  
  1645. Format of data buffer:
  1646. Offset    Size    Description
  1647.  00h    BYTE    (call) function
  1648.          00h get API entry point???
  1649.         01h get EMM import structure???
  1650.         02h get ???
  1651.         03h get ???
  1652.         04h get ???
  1653. ---function 00h---
  1654.  00h    WORD    ??? (0025h)
  1655.  02h    DWORD    API entry point (see INT 67/AX=FFA5h)
  1656. ---function 01h---
  1657.  00h    DWORD    physical address of EMM import structure???
  1658.  04h    BYTE    major version???
  1659.  05h    BYTE    minor version???
  1660. ---function 02h---
  1661.  00h    WORD    ???
  1662. ---function 03h---
  1663.  00h    WORD    ???
  1664.  02h    WORD    ???
  1665. ---function 04h---
  1666.  00h    WORD    ???
  1667.  02h    WORD    number of paragraphs of ???
  1668.  04h    WORD    ???
  1669. --------d-214402-----------------------------
  1670. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  1671.     AX = 4402h
  1672.     BX = file handle for device "SCSIMGR$"
  1673.     CX = 0004h
  1674.     DS:DX -> buffer for function address
  1675. Return: CF clear if successful
  1676.         AX = 0004h
  1677.     CF set on error
  1678.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1679. Note:    the function address is called with the address of a SCSI Request
  1680.       Block on the stack and the caller must clean up the stack
  1681. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  1682.  
  1683. Format of SCSI Request Block (64 bytes):
  1684. Offset    Size    Description
  1685.  00h    BYTE    request number
  1686.         00h "HA_INQ"     host adapter inquiry
  1687.         01h "GET_TYPE"     get device type
  1688.         02h "EXEC_SIO"     execute SCSI I/O
  1689.         03h "ABORT_SRB"     abort SRB
  1690.         04h "RESET_DEV"     reset SCSI device
  1691.         05h "SET_HAPRMS" set host adapter parameters
  1692.  01h    BYTE    request status
  1693.         00h not done yet
  1694.         02h aborted
  1695.         04h SCSI I/O error
  1696.         80h invalid
  1697.         81h no adapter
  1698.         82h no device attached
  1699.         else status
  1700.  02h    BYTE    host adapter ID
  1701.  03h    BYTE    request flags
  1702.         bit 3: ???
  1703.  04h    DWORD    reserved
  1704. ---request 00h---
  1705.  08h    BYTE    (returned) number of host adapters
  1706.  09h    BYTE    (returned) target adapter ID
  1707.  0Ah 16 BYTEs    (returned) manager ID
  1708.  1Ah 16 BYTEs    (returned) adapter ID
  1709.  2Ah 16 BYTEs    (returned) parameters
  1710. ---request 01h---
  1711.  08h    BYTE    target ID
  1712.  09h    BYTE    logical unit number
  1713.  0Ah    BYTE    (returned) device type
  1714.         01h streamer
  1715. ---request 02h---
  1716.  08h    BYTE    target ID
  1717.  09h    BYTE    logical unit number
  1718.  0Ah    DWORD    data allocation length
  1719.  0Eh    BYTE    sense allocation length
  1720.  0Fh    DWORD    data buffer pointer
  1721.  13h    DWORD    next request pointer (for linking)
  1722.  17h    BYTE    CDB length
  1723.  18h    BYTE    (returned) host adapter status
  1724.         11h select timeout
  1725.         12h data overrun
  1726.         13h bus error
  1727.         14h bus failure
  1728.  19h    BYTE    (returned) target status
  1729.         02h sense data stored in SRB
  1730.         08h target busy
  1731.         18h reservation error
  1732.  1Ah    DWORD    post routine address
  1733.  1Eh    WORD    real mode Post DS
  1734.  20h    DWORD    SRB pointer
  1735.  24h    WORD    reserved
  1736.  26h    DWORD    SRB physical address
  1737.  2Ah 22 BYTEs    SCSIMGR$ workspace
  1738.  40h  N BYTEs    CCB (20-24 bytes)
  1739. ---request 04h---
  1740.  08h    BYTE    target ID
  1741.  09h    BYTE    logical unit number
  1742.  0Ah 14 BYTEs    reserved
  1743.  18h    BYTE    (returned) host adapter status (see above)
  1744.  19h    BYTE    (returned) target status (see above)
  1745.  1Ah    DWORD    post routine address
  1746.  1Eh 34 BYTEs    workspace
  1747.  
  1748. Format of CCB:
  1749. Offset    Size    Description
  1750.  00h    BYTE    command code
  1751.         01h rewind
  1752.         05h get block size limits
  1753.         08h read
  1754.         0Ah write
  1755.         10h write file marks
  1756.         11h SCSI Space (set position?)
  1757.         12h SCSI Inquire
  1758.         19h erase
  1759.         1Bh load/unload media
  1760.  01h    BYTE    flags
  1761.         bits 4-0: vary by function
  1762.         bits 7-5: logical unit number
  1763.  02h    BYTE    "adr_1"
  1764.  03h    BYTE    "adr_0"
  1765.  04h    BYTE    length
  1766.  05h    BYTE    control
  1767.     ...
  1768.  06h/0Ah 14 BYTEs buffer for sense data
  1769. --------m-214402-----------------------------
  1770. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  1771.     AX = 4402h
  1772.     BX = file handle for device "386MAX$$"
  1773.     CX = 005Ah
  1774.     DS:DX -> version byte followed by 386MAX state buffer (see below)
  1775.         version byte must be 03h for 386MAX v6.01
  1776. Return: CF clear if successful
  1777.         buffer at DS:DX+1 filled
  1778.         AX = number of bytes actually copied
  1779.     CF set on error
  1780.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1781. Notes:    if the value given in CX is less than 5Ah, only a partial state record
  1782.       will be returned
  1783.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  1784.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  1785.       56h bytes for v5.11.
  1786.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  1787.       the word at offset 25h in the returned state, load all other
  1788.       registers as needed for the desired function, and execute an
  1789.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  1790.       if it is not otherwise modified by the API function.    For safety,
  1791.       in case a function is not supported or 386MAX is not present, SP
  1792.       should be saved and restored around the API call.
  1793.     Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
  1794.       use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
  1795.       make some calls incorrectly
  1796. SeeAlso: AX=4403h"386MAX",INT 67/AH=3Fh
  1797.  
  1798. Format of 386MAX v6.01 state:
  1799. Offset    Size    Description
  1800.  00h  6 BYTEs    signature "386MAX"
  1801.  06h  4 BYTEs    version string "N;NN" (i.e. "6;01" for v6.01)
  1802.  0Ah    WORD    segment of low-memory portion of 386MAX.SYS
  1803.  0Ch  2 BYTEs    ???
  1804.  0Eh    WORD    segment of ??? memory block or 0000h
  1805.  10h    WORD    bit flags 1 (see below)
  1806.  12h    WORD    starting address of video memory in K
  1807.  14h  2 BYTEs    ???
  1808.  16h    WORD    total high DOS memory in KB
  1809.  18h  2 BYTEs    ???
  1810.  1Ah    WORD    available shared memory in KB
  1811.  1Ch    WORD    KBytes extended memory used by 386MAX
  1812.  1Eh  2 BYTEs    ???
  1813.  20h    WORD    total extended memory in KB
  1814.  22h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  1815.  24h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  1816.  26h    WORD    ???
  1817.  28h  2 BYTEs    ???
  1818.  2Ah    DWORD    ???
  1819.  2Eh  4 BYTEs    ???
  1820.  32h    WORD    system configuration??? flags
  1821.         bit 1: ROM compressed???
  1822.         bit 3: ???
  1823.         bit 5: 386MAX loaded into high memory
  1824.         bit 11: PC/XT (thus only single 8259 interrupt controller
  1825.                 present, DMA only in 1st megabyte, etc)
  1826.  34h    WORD    ??? bit flags
  1827.  36h  4 BYTEs    ???
  1828.  3Ah    WORD    segment of first MCB in high memory chain???
  1829.  3Ch    WORD    flags
  1830.         bit 2: no DPMI services
  1831.         bit 11: don't backfill holes in video memory area
  1832.         bit 12: don't backfill below video memory???
  1833.  3Eh    WORD    flags
  1834.         bit 7: ???
  1835.  40h    WORD    flags
  1836.         bit 0: Windows3 support enabled
  1837.         bit 8: ???
  1838.  42h    WORD    segment of first 386MAX control block??? (see below)
  1839.  44h    WORD    amount of memory to report available on INT 15/AH=88h
  1840.  46h  4 BYTEs    ???
  1841.  4Ah    WORD    ???
  1842.  4Ch  2 BYTEs    ???
  1843.  4Eh    WORD    ???
  1844.  50h    WORD    bit flags
  1845.         bit 12: ???
  1846.  52h    DWORD    old INT 21h
  1847.  56h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  1848.  
  1849. Bitfields for bit flags 1:
  1850.  bit 1    ???
  1851.  bit 2    ???
  1852.  bit 3    ??? (cleared by calling INT 67 functions)
  1853.  bit 4    high RAM present???
  1854.  bit 5    ???
  1855.  bit 6    386MAX active???
  1856.  bit 7    386MAX is providing EMS services
  1857.  bit 8    ???
  1858.  bit 9    ??? (see INT 15/AX=2402h)
  1859.  bit 10    ???
  1860.  bit 11    ???
  1861.  bit 12    ???
  1862.  bit 13    QPMS has been used
  1863.  bit 14    ???
  1864.  bit 15    ???
  1865.  
  1866. Format of 386MAX control block:
  1867. Offset    Size    Description
  1868.  00h    WORD    segment of next block (FFFFh if last)
  1869.  02h    WORD    segment of previous block (FFFFh if first)
  1870.  04h 12 BYTEs    filename
  1871.  10h    WORD    resident size in paragraphs
  1872.  12h    WORD    environment size???
  1873.  14h    WORD    real prsent environment size + 1 (0000h if ENVSAVE used)
  1874.  16h  2 BYTEs    ???
  1875.  18h    DWORD    initial size or SIZE=n in 386LOAD commandline
  1876.  1Ch    DWORD    SIZE=-1 ???
  1877.  20h    DWORD    SIZE= ???
  1878.  24h    BYTE    PRGREG= if specified, else FFh
  1879.  25h    BYTE    ENVREG= if specified, else FFh
  1880.  26h    BYTE    FlexFrame (00h not present, 01h present)
  1881.  27h  3 BYTEs    ???
  1882.  2Ah    BYTE    GROUP= or 00h if not present
  1883.  2Bh    BYTE    ???
  1884.  2Ch    WORD    PSP
  1885.  
  1886. Format of high memory info record:
  1887. Offset    Size    Description
  1888.  00h    WORD    segment address of memory region
  1889.  02h    WORD    size of memory region in paragraphs
  1890.  04h    BYTE    type or flags???
  1891.         00h if locked out
  1892.         02h if EMS page frame
  1893.         04h if high RAM
  1894.         42h if ROM
  1895.  05h    BYTE    ???
  1896.  
  1897. Format of ROM shadowing record:
  1898. Offset    Size    Description
  1899.  00h    WORD    segment of ROM???
  1900.  02h    WORD    segment of ROM???
  1901.  04h  2 BYTEs    ???
  1902.  06h    WORD    size of shadowed ROM in paragraphs
  1903.  08h  4 BYTEs    ???
  1904.  
  1905. Values for memory type:
  1906.  00h unused by EMS
  1907.  01h DOS
  1908.  04h page frame overlapping ROM???
  1909.  80h high memory
  1910.  84h page frame???
  1911.  87h video ROM???
  1912. Note:    the type may be 00h (unused) if the 16K page is split among different
  1913.       uses (such as ROM and high RAM)
  1914.  
  1915. Call 386MAX API (via OUT DX,AL) with:
  1916.     STACK: WORD value for DX
  1917.     AH = 01h get high memory information
  1918.         ES:DI -> buffer for array of high memory info records
  1919.             (see above)
  1920.         Return: CX = number of records placed in buffer
  1921.     AH = 02h get shadowed ROM info???
  1922.         ES:DI -> buffer for array of ROM shadowing records (see above)
  1923.         Return: CX = number of records placed in buffer
  1924.     AH = 03h get 386MAX state
  1925.         ES:DI -> 90-byte buffer for state (see above)
  1926.         Return: AH = 00h (successful)
  1927.             buffer filled
  1928.         Note:    unlike INT 21/AX=4402h"386MAX", this function omits
  1929.               the first byte specifying the state buffer version
  1930.     AH = 04h get memory types???
  1931.         ES:DI -> buffer for memory type info (array of bytes, one per
  1932.             16K page) (see above)
  1933.         Return:    CX = number of bytes placed in buffer
  1934.     AH = 05h get ???
  1935.         AL = subfunction
  1936.             00h invoke INT 15/AX=2401h first
  1937.             01h don't invoke INT 15/AX=2401h first
  1938.         CX = number of bytes to copy (0000h for default)
  1939.         SI = ???
  1940.         ES:DI -> buffer for ???
  1941.         Return: CX = number of bytes actually copied
  1942.             ???
  1943.     AH = 06h get memory speed info
  1944.         ES:DI -> buffer for memory speed records (see below)
  1945.         Return: AH = 00h (successful)
  1946.             CX = number of bytes placed in buffer
  1947.         Note:    this function can take over a second to execute
  1948.     AH = 07h ???
  1949.         ???
  1950.         Return:    ???
  1951.     AH = 08h ???
  1952.         AL = ??? (00h or nonzero)
  1953.     AH = 09h toggle ??? flags
  1954.         BX = bitmask of bits of ??? flags (word at state+10h) to toggle
  1955.         Return: AH = 00h (successful)
  1956.         Note: invokes INT 15/AX=2401h first
  1957.     AH = 0Ah toggle ??? flags
  1958.         BX = bitmask of bits of ??? (word at state+32h) to toggle
  1959.         Return: AH = 00h (successful)
  1960.         Notes:    invokes INT 15/AX=2401h first
  1961.             does ??? if bit 3 on after specified bits are toggled
  1962.     AH = 0Bh toggle ??? flags
  1963.         BX = bitmask of bits of ??? (word at state+34h) to toggle
  1964.         Return: AH = 00h (successful)
  1965.         Note: invokes INT 15/AX=2401h first
  1966.     AH = 0Ch toggle ??? flags
  1967.         BX = bitmask of bits of ??? (word at state+40h) to toggle
  1968.         Return: AH = 00h (successful)
  1969.         Note: invokes INT 15/AX=2401h first
  1970.     AH = 0Dh specify 386MAX high-memory location
  1971.         BX = segment address of high-memory real-mode portion of 386MAX
  1972.         ???
  1973.         Return: AH = status (00h successful)
  1974.             ???
  1975.     AH = 0Eh CRT controller register virtualization
  1976.         AL = subfunction
  1977.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  1978.             01h trap accesses to CRTC I/O ports
  1979.     AH = 0Fh reboot system
  1980.         Return: never
  1981.     AH = 11h get high memory information
  1982.         ES:DI -> 96-byte buffer for high memory info
  1983.         Return: AH = 00h (successful)
  1984.             ES:DI buffer filled
  1985.         Notes:    each byte in buffer contains bit flags for a 4K page in
  1986.               the A000h-FFFFh region
  1987.                 bit 0: ???
  1988.                 bit 1: physical address same as linear address
  1989.                 bit 2: EMS page frame
  1990.                 bit 6: ???
  1991.             this function can take over a second to execute
  1992.     AH = 12h ???
  1993.         AL = subfunction
  1994.             00h ???
  1995.             01h ???
  1996.         ???
  1997.         Return: AH = 00h (successful) if AL=00h or 01h
  1998.             AH = 8Fh otherwise
  1999.     AH = 13h page protection???
  2000.         AL = subfunction
  2001.             00h set all ??? 4K pages to read-only???
  2002.             01h set all ??? 4K pages to read-write???
  2003.         ???
  2004.         Return: AH = 00h (successful) if AL=00h or 01h
  2005.             AH = 8Fh otherwise
  2006.     AH = 15h ???
  2007.         ???
  2008.         Return: ???
  2009.     AH = 16h get 386MAX memory usage screen
  2010.         ES:DI -> buffer for memory info display
  2011.         CX = size of buffer in bytes
  2012.         Return:    ES:DI buffer filled with '$'-terminated string (if
  2013.                 large enough to hold entire usage screen)
  2014.     AH = 17h Windows 3 startup/termination
  2015.         AL = subfunction
  2016.             00h Windows3 initializing
  2017.             DX (on stack) = Windows startup flags
  2018.             DI = Windows version number (major in upper byte)
  2019.             ES:BX = 0000h:0000h
  2020.             DS:SI = 0000h:0000h
  2021.             Return: CX = 0000h if OK for Windows to load
  2022.                    <> 0 if Windows should not load
  2023.                 ES:BX -> startup info structure
  2024.                 DS:SI -> Virtual86 mode enable/disable callback
  2025.             01h Windows3 terminating
  2026.             ES:BX -> ???
  2027.             DX (on stack) = Windows exit flags
  2028.             Return: ???
  2029.     AH = 18h QPMS (Qualitas Protected Memory Services)
  2030.         AL = subfunction
  2031.             00h get QPMS configuration
  2032.             Return: BX = starting segment of QPMS memory window
  2033.                 CX = number of 4K pages reserved for QPMS???
  2034.                 DX = number of 4K pages in QPMS window???
  2035.             01h map QPMS memory page???
  2036.             BX = 4K page number within memory reserved for QPMS???
  2037.             CL = 4K page number within QPMS memory window???
  2038.             02h mark all QPMS memory read-only
  2039.             03h mark all QPMS memory read-write
  2040.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  2041.     AH = 19h get linear address for physical address
  2042.         EDX = physical address (low word on stack)
  2043.         Return: AH = status
  2044.                 00h successful
  2045.                 EDX = linear address at which physical address
  2046.                     may be accessed
  2047.                 8Bh physical address currently not addressable
  2048.         Note: calls INT 15/AX=2401h first
  2049.     AH = 1Ah set page table entry???
  2050.         EDX = new page table entry??? (low word on stack)
  2051.         ESI = linear address of page???
  2052.         Return: AH = status (00h,8Bh)
  2053.         Note: calls INT 15/AX=2401h first
  2054.     AH = 1Bh get ???
  2055.         Return: AH = status
  2056.             BX = ???
  2057.             CX = ???
  2058.             EDX = physical address of ???
  2059.     AH = 1Ch get original interrupt vector
  2060.         AL = interrupt vector (00h-7Fh)
  2061.         Return: AH = 00h (successful)
  2062.             EDX = original vector before 386MAX loaded (segment in
  2063.                 high word, offset in low word)
  2064.         Note:    no range checking is performed; requests for INTs 80h-
  2065.               FFh will return random values
  2066.     AH = 1Dh display string???
  2067.         SI = ???
  2068.         Return: AH = 00h (successful)
  2069.             ???
  2070.     AH = 1Eh ???
  2071.         ES:DI -> ???
  2072.         ???
  2073.         Return: ???
  2074.     AH = 1Fh ???
  2075.         ???
  2076.         Return: AX = 0000h if successful
  2077.             BX = ??? (0001h for 386MAX v6.01)
  2078.             CL = ???
  2079.             DL = state buffer size??? (5Ah for 386MAX v6.01)
  2080.             DH = ??? (00h for 386MAX v6.01)
  2081.             SI = ???
  2082.             ES???:DI -> ???
  2083.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  2084.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  2085. Return: AH = status (as for EMS INT 67 calls)
  2086.         00h successful
  2087.         80h internal error
  2088.         81h hardware malfunction
  2089.         83h invalid handle
  2090.         84h    undefined function
  2091.         8Ah invalid logical page nuber
  2092.         8Bh illegal physical page number
  2093.         8Fh undefined subfunction
  2094.         A4h access denied
  2095.         etc.
  2096.     STACK popped (value placed in DX if no specific return value for DX)
  2097.  
  2098. Format of memory speed record:
  2099. Offset    Size    Description
  2100.  00h    DWORD    page table entry for 4K page
  2101.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  2102.         entire 4K page
  2103. --------V-214402-----------------------------
  2104. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  2105.     AX = 4402h
  2106.     BX = file handle for device "PGS1600$"
  2107.     CX = 0018h (size of buffer)
  2108.     DS:DX -> configuration buffer (see below)
  2109. Return: CF clear if successful
  2110.         buffer filled
  2111.         AX = number of bytes actually copied
  2112.     CF set on error
  2113.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2114. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  2115.       display adapter, which provides a 1600x1200 monochrome display as
  2116.       well as one of two emulations, MDA or CGA.
  2117. SeeAlso: AX=4403h"PGS1600"
  2118.  
  2119. Format of configuration information:
  2120. Offset    Size    Description
  2121.  00h    WORD    version (high byte = major, low byte = minor)
  2122.  02h    WORD    board initialisation mode
  2123.  04h    WORD    board I/O address
  2124.         03D0h CGA emulation
  2125.         03B0h MDA emulation
  2126.         0390h no emulation
  2127.         0350h no emulation, alternate
  2128.  06h    WORD    emulation buffer segment
  2129.         B800h    CGA emulation
  2130.         B000h    MDA emulation
  2131.         0000h    no emulation
  2132.  08h    WORD    PG1600 graphics buffer segment
  2133.  0Ah    WORD    number of bytes between consecutive graphic rows
  2134.  0Ch    WORD    horizontal pixel size
  2135.  0Eh    WORD    vertical pixel size
  2136.  10h    WORD    horizontal dots per inch
  2137.  12h    WORD    vertical dots per inch
  2138.  14h    WORD    graphics buffer bits per pixel
  2139.  16h    WORD    monitor bits per pixel
  2140. --------N-214402-----------------------------
  2141. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  2142.     AX = 4402h
  2143.     BX = file handle referencing device "$IPCUST"
  2144.     CX, DS:DX ignored
  2145. Return: CF clear if successful
  2146.         AX destroyed
  2147.     CF set on error
  2148.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2149. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  2150.       version 2.05.     If less than the entire data is read or written,
  2151.       the next read/write continues where the previous one ended; this
  2152.       call and AX=4403h both reset the location at which the next
  2153.       operation starts to zero
  2154.     v2.1+ uses a new configuration method, but allows the installation
  2155.       of IPCUST.SYS for backward compatibility with other software which
  2156.       must read the PC/TCP configuration
  2157. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  2158. --------N-214402-----------------------------
  2159. INT 21 - WORKGRP.SYS - GET API ENTRY POINT
  2160.     AX = 4402h
  2161.     BX = file handle for device "NET$HLP$"
  2162.     CX = 0008h
  2163.     DS:DX -> buffer for entry point record
  2164. Return: CF clear if successful
  2165.         AX = number of bytes actually read
  2166.     CF set on error
  2167.         AX = error code
  2168. Program: WORKGRP.SYS is distributed with MS-DOS 6.0 to permit communication
  2169.       with PCs running Windows for Workgroups or LAN Manager
  2170. SeeAlso: AH=3Fh"WORKGRP.SYS"
  2171.  
  2172. Format of entry point record:
  2173. Offset    Size    Description
  2174.  00h    WORD    3633h  \ signature???
  2175.  02h    WORD    EF6Fh  /
  2176.  04h    DWORD    address of entry point
  2177. Note:    first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
  2178.       IOCTL rather than READ to get the entry point record
  2179.  
  2180. Call WORKGRP entry point with:
  2181.     STACK:    WORD    function number (0000h-0009h)
  2182. Return: STACK unchanged
  2183.  
  2184. Call WORKGRP function 00h with:
  2185.     STACK:    WORD    0000h (function "get ???")
  2186. Return: DX:AX -> data table
  2187.  
  2188. Call WORKGRP function 01h with:
  2189.     STACK:    WORD    0001h (function "hook ???")
  2190. Return: STACK:    DWORD    pointer to ???
  2191.         WORD    0001h (function number)
  2192.  
  2193. Call WORKGRP function 02h with:
  2194.     STACK:    WORD    0002h (function "unhook ???")
  2195.     ???
  2196. Return: ???
  2197.  
  2198. Call WORKGRP function 03h with:
  2199.     STACK:    WORD    0003h (function "reenable printer port")
  2200.         WORD    LPT port number
  2201. Return: ???
  2202.  
  2203. Call WORKGRP function 04h with:
  2204.     STACK:    WORD    0004h (function "disable printer port")
  2205.         WORD    LPT port number
  2206. Return: ???
  2207.  
  2208. Call WORKGRP function 05h with:
  2209.     STACK:    WORD    0005h (function "???")
  2210.         ???
  2211. Return: ???
  2212.  
  2213. Call WORKGRP function 06h with:
  2214.     STACK:    WORD    0006h (function "???")
  2215. Return: STACK unchanged
  2216.     AX = 0000h
  2217.     DX = 0000h
  2218.  
  2219. Call WORKGRP functions 07h-09h with:
  2220.     STACK:    WORD    0007h-0009h (NOP functions)
  2221. Return: STACK unchanged
  2222.     AX = 0001h
  2223.     DX = 0000h
  2224. --------N-214402-----------------------------
  2225. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  2226.     AX = 4402h
  2227.     BX = file handle referencing device "10BEUI$"
  2228.     DS:DX -> parameter record (see below)
  2229.     CX ignored
  2230. Return: CF clear if successful
  2231.         AX destroyed
  2232.     CF set on error
  2233.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2234. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  2235.  
  2236. Format of parameter record:
  2237. Offset    Size    Description
  2238.  00h    WORD    000Ah (function number???)
  2239.  02h    WORD    ???
  2240.  04h    DWORD    pointer to buffer for ???
  2241.  08h  4 BYTEs    ???
  2242.  0Ch    WORD    transfer size
  2243. --------N-214402-----------------------------
  2244. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  2245.     AX = 4402h
  2246.     BX = file handle referencing device "MEMMGR0$"
  2247.     DS:DX -> 6-byte buffer for interface info (see below)
  2248.     CX ignored
  2249. Return: CF clear if successful
  2250.         AX destroyed
  2251.     CF set on error
  2252.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2253. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  2254.  
  2255. Format of interface info:
  2256. Offset    Size    Description
  2257.  00h    DWORD    address of entry point (see below)
  2258.  04h    WORD    version (0500h for v5.00)
  2259.  
  2260. Call entry point with:
  2261.     AL = 01h ???
  2262.         BX = ???
  2263.         Return: CF clear if successful
  2264.             CF set on error
  2265.             AX = error code
  2266.     AL = 02h ???
  2267.         ???
  2268.     AL = 03h ???
  2269.         ???
  2270.     AL = 04h set/restore memory allocation strategy
  2271.         BX = subfunction
  2272.         0000h set strategy
  2273.         0001h restore strategy
  2274.         Return: CF clear if successful
  2275.             CF set on error (if function disabled)
  2276.             various registers destroyed
  2277.     AL = other
  2278.         Return: CF set
  2279.             AX = 0000h
  2280.             BL = 01h
  2281. --------D-214403-----------------------------
  2282. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  2283.     AX = 4403h
  2284.     BX = file handle referencing character device
  2285.     CX = number of bytes to write
  2286.     DS:DX -> data to write
  2287. Return: CF clear if successful
  2288.         AX = number of bytes actually written
  2289.     CF set on error
  2290.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2291. Notes:    format of data is driver-specific (see below for some specific cases)
  2292.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  2293.       KEYSTACK.SYS driver will push the specified characters on the
  2294.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  2295.       driver will push the characters onto the keyboard stack
  2296. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  2297. SeeAlso: INT 2F/AX=D44Fh
  2298. --------c-214403-----------------------------
  2299. INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL
  2300.     AX = 4403h
  2301.     BX = handle for device "SMARTAAR"
  2302.     CX = number of bytes to write
  2303.     DS:DX -> SMARTDRV control block (see below)
  2304. Return: CF clear if successful
  2305.         AX = number of bytes actually written
  2306.            = 0000h if control block too small for given command
  2307.     CF set on error
  2308.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2309. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  2310.  
  2311. Format of SMARTDRV control block:
  2312. Offset    Size    Description
  2313.  00h    BYTE    function code
  2314.         00h flush cache
  2315.         01h flush and discard cache
  2316.         02h disable caching (flushes and discards cache first)
  2317.         03h enable caching
  2318.         04h control write caching
  2319.         05h set flushing tick count
  2320.         06h lock cache contents
  2321.         07h unlock cache contents
  2322.         08h set flush-on-reboot flag
  2323.         09h unused
  2324.         0Ah control full-track caching
  2325.         0Bh reduce cache size
  2326.         0Ch increase cache size
  2327.         0Dh set INT 13 chain address
  2328. ---function 04h---
  2329.  01h    BYTE    write caching control action
  2330.         00h turn off write-through
  2331.         01h turn on write-through
  2332.         02h turn off write buffering (also flushes cache)
  2333.         03h turn on write buffering (also flushes cache)
  2334. ---function 05h---
  2335.  01h    WORD    number of timer ticks between cache flushes
  2336. ---function 08h---
  2337.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  2338. ---function 0Ah---
  2339.  01h    BYTE    full-track writes are
  2340.         00h not cached
  2341.         01h cached
  2342. ---functions 0Bh,0Ch---
  2343.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  2344. ---function 0Dh---
  2345.  01h    DWORD    new address to which to chain on INT 13
  2346. Note:    the previous address is not preserved
  2347. --------d-214403-----------------------------
  2348. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  2349.     AX = 4403h
  2350.     BX = file handle referencing character device for CD-ROM driver
  2351.     CX = number of bytes to write
  2352.     DS:DX -> control block (see below)
  2353. Return: CF clear if successful
  2354.         AX = number of bytes actually written
  2355.     CF set on error
  2356.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2357. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  2358.  
  2359. Format of control block:
  2360. Offset    Size    Description
  2361.  00h    BYTE    function code
  2362.         00h eject disk
  2363.         01h lock/unlock door
  2364.         02h reset drive
  2365.         03h control audio channel
  2366.         04h write device control string
  2367.         05h close tray
  2368. ---functions 00h,02h,05h---
  2369.  no further fields
  2370. ---function 01h---
  2371.  01h    BYTE    lock function
  2372.         00h unlock door
  2373.         01h lock door
  2374. ---function 03h---
  2375.  01h    BYTE    input channel (0-3) for output channel 0
  2376.  02h    BYTE    volume for output channel 0
  2377.  03h    BYTE    input channel (0-3) for output channel 1
  2378.  04h    BYTE    volume for output channel 1
  2379.  05h    BYTE    input channel (0-3) for output channel 2
  2380.  06h    BYTE    volume for output channel 2
  2381.  07h    BYTE    input channel (0-3) for output channel 3
  2382.  08h    BYTE    volume for output channel 3
  2383. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  2384.       right prime; a volume of 00h is off
  2385. ---function 04h---
  2386.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  2387.         interpretation
  2388. --------d-214403-----------------------------
  2389. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  2390.     AX = 4403h
  2391.     BX = handle for device "SCSITAPE"
  2392.     CX = number of bytes to write
  2393.     DS:DX -> SCSITAPE control block (see below)
  2394. Return: CF clear if successful
  2395.         AX = number of bytes actually written
  2396.     CF set on error
  2397.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2398. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  2399.  
  2400. Format of SCSITAPE control block:
  2401. Offset    Size    Description
  2402.  00h    WORD    command type
  2403.         'F' Format (argument 1 = interleave, argument 2 = format type)
  2404.         'E' Erase
  2405.         'R' Rewind
  2406.         'L' Load
  2407.         'N' No Load
  2408.         'S' Space (argument 1 = count, argument 2 = type)
  2409.         'M' File Mark (argument 1 = count)
  2410.         'A' Reassign 
  2411.  02h    WORD    argument 1
  2412.  04h    WORD    argument 2
  2413.  06h    WORD    segment of command buffer
  2414.  08h    WORD    offset of command buffer
  2415.  0Ah    WORD    length of command buffer
  2416. --------E-214403-----------------------------
  2417. INT 21 U - AI Architects - OS/x86??? - API
  2418.     AX = 4403h
  2419.     BX = handle for device "AIA_OS"
  2420.     CX = number of bytes to write (ignored)
  2421.     DS:DX -> 12-byte buffer, first byte is command:
  2422.             81h installation check
  2423.             82h get API entry point
  2424.             84h uninstall
  2425. Return: CF clear if successful
  2426.         AX = number of bytes actually written
  2427.     CF set on error
  2428.         AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h)
  2429. Notes:    these functions are only available if the DOS extender was loaded as a
  2430.       device driver in CONFIG.SYS
  2431.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  2432. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  2433. Index:    installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
  2434.  
  2435. Format of buffer on return:
  2436. Offset    Size    Description
  2437.  00h  4 BYTEs    signature "IABH"
  2438. ---if func 81h---
  2439.  (no additional fields)
  2440. ---if func 82h---
  2441.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  2442. ---if func 84h---
  2443.  04h    WORD    success indicator
  2444.  06h    WORD    segment of ???
  2445.  08h    WORD    segment of ??? memory block to free if nonzero
  2446.  0Ah    WORD    segment of ??? memory block to free if nonzero
  2447. --------m-214403-----------------------------
  2448. INT 21 U - Qualitas 386MAX v6.01 - SET STATE
  2449.     AX = 4403h
  2450.     BX = handle for device "386MAX$$"
  2451.     CX = number of bytes to copy (up to 5Ah)
  2452.     DS:DX -> 386MAX state buffer (see AX=4402h"386MAX")
  2453. Return: CF clear if successful
  2454.         AX = number of bytes actually written
  2455.     CF set on error
  2456.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2457. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  2458.       (specifying the version of the state record) and the buffer must
  2459.       contain CX bytes AFTER the initial byte
  2460. SeeAlso: AX=4402h"386MAX"
  2461. --------V-214403-----------------------------
  2462. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  2463.     AX = 4403h
  2464.     BX = file handle for device "PGS1600$"
  2465.     CX = 0018h (size of buffer)
  2466.     DS:DX -> configuration buffer (see AX=4402h"PGS1600")
  2467. Return: CF clear if successful
  2468.         AX = number of bytes actually written
  2469.     CF set on error
  2470.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2471. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  2472.       display adapter, which provides a 1600x1200 monochrome display as
  2473.       well as one of two emulations, MDA or CGA.
  2474. SeeAlso: AX=4402h"PGS1600"
  2475. --------N-214403-----------------------------
  2476. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  2477.     AX = 4403h
  2478.     BX = file handle referencing device "$IPCUST"
  2479.     CX, DS:DX ignored
  2480. Return: CF clear if successful
  2481.         AX destroyed
  2482.     CF set on error
  2483.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2484. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  2485.       version 2.05.     If less than the entire data is read or written,
  2486.       the next read/write continues where the previous one ended; this
  2487.       call and AX=4402h both reset the location at which the next
  2488.       operation starts to zero
  2489.     v2.1+ uses a new configuration method, but allows the installation
  2490.       of IPCUST.SYS for backward compatibility with other software which
  2491.       must read the PC/TCP configuration
  2492. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  2493. --------D-214404-----------------------------
  2494. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  2495.     AX = 4404h
  2496.     BL = drive number (00h = default, 01h = A:, etc.)
  2497.     CX = number of bytes to read
  2498.     DS:DX -> buffer
  2499. Return: CF clear if successful
  2500.         AX = number of bytes actually read
  2501.     CF set on error
  2502.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2503. Note:    format of data is driver-specific
  2504. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  2505. --------d-214404CX0004-----------------------
  2506. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  2507.     AX = 4404h
  2508.     CX = 0004h
  2509.     BL = drive number (00h = default, 01h = A:, etc.)
  2510.     DS:DX -> DWORD buffer to receive device driver address
  2511. Note:    In addition to returning the address of the Stacker device driver,
  2512.       this call also sets the volume number at offset 3Eh in the device
  2513.       driver (see INT 25/AX=CDCDh)
  2514. SeeAlso: INT 25/AX=CDCDh
  2515. --------d-214404-----------------------------
  2516. INT 21 - Stacker - GET STACVOL FILE SECTORS
  2517.     AX = 4404h
  2518.     BL = drive number (0 is current drive)
  2519.     CX = byte count (i.e., 200h = 1 sector)
  2520.     DS:DX -> buffer (see below)
  2521. Return:    Data Buffer contains the number of sectors requested from the
  2522.       STACVOL physical file for the drive specified.
  2523.  
  2524. Format of stacker buffer:
  2525. Offset    Size    Description
  2526.  00h    WORD    01CDh
  2527.  02h    WORD    sector count
  2528.  04h    DWORD    number of starting sector
  2529.  08h    DWORD    far pointer to Data Buffer
  2530. --------d-214404-----------------------------
  2531. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  2532.     AX = 4404h
  2533.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  2534.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  2535.     DS:DX -> data record (see below)
  2536. Return: CF clear if successful
  2537.         AX = number of bytes read
  2538.     CF set on error
  2539.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2540. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  2541.       expander by Vertisoft Systems, Inc.
  2542. Note:    the installation check consists of scanning memory for the signature
  2543.       "FAT 2.6  byte:", which is immediately followed by a data table
  2544. SeeAlso: AX=440Dh
  2545. Index:    installation check;DUBLDISK.SYS
  2546.  
  2547. Format of data record:
  2548. Offset    Size    Description
  2549.  00h    WORD    (call) signature 4444h
  2550.  02h    BYTE    (call) function
  2551.             00h ???
  2552.             01h ???
  2553. ---function 00h---
  2554.  02h    BYTE    (return) ???
  2555.  03h    BYTE    (return) ???
  2556. ---function 01h---
  2557.  02h    WORD    (return) 4444h
  2558.  04h    WORD    allocation unit size???
  2559.  06h    WORD    ???
  2560.  08h    WORD    ???
  2561.  0Ah    BYTE    ???
  2562.  
  2563. Format of signature data table:
  2564. Offset    Size    Description
  2565.  00h  5 BYTEs    ???
  2566.  05h    BYTE    first drive number
  2567.  06h    BYTE    number of drives
  2568.  07h    ???
  2569. --------d-214404-----------------------------
  2570. INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  2571.     AX = 4404h
  2572.     BL = drive number (00h = default, 01h = A:, etc)
  2573.     CX = 000Ah (size of DSPACKET structure)
  2574.     DS:DX -> DSPACKET structure (see below)
  2575. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2576.         AX = number of bytes actually transferred
  2577.     CF set on error
  2578.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2579. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2580.  
  2581. Format of DSPACKET structure:
  2582. Offset    Size    Description
  2583.  00h    WORD    signature 444Dh ("DM")
  2584.  02h    BYTE    command code
  2585.          46h ('F') flush internal caches
  2586.         49h ('I') flush and invalidate internal caches
  2587.  03h    WORD    result code
  2588.          (return) 4F4Bh ("OK") if successful, else unchanged
  2589.  05h  5 BYTEs    padding
  2590. --------d-214404-----------------------------
  2591. INT 21 U - xDISK v3.31 - CONFIGURE
  2592.     AX = 4404h
  2593.     BL = drive number (00h = default, 01h = A:, etc)
  2594.     CX = 0047h (length of version string)
  2595.     DS:DX -> 79-byte buffer for version string and ???
  2596.     DS:0081h = commandline containing new switches for driver
  2597. Return: CF clear if successful
  2598.         AX = number of bytes actually transferred
  2599.     CF set on error
  2600.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2601. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  2602. SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh"xDISK"
  2603. --------D-214405-----------------------------
  2604. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  2605.     AX = 4405h
  2606.     BL = drive number (00h = default, 01h = A:, etc)
  2607.     CX = number of bytes to write
  2608.     DS:DX -> data to write
  2609. Return: CF clear if successful
  2610.         AX = number of bytes actually written
  2611.     CF set on error
  2612.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2613. Note:    format of data is driver-specific
  2614. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  2615. --------d-214405-----------------------------
  2616. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  2617.     AX = 4405h
  2618.     BX = drive number (00h = default, 01h = A:, etc)
  2619.     CX = number of bytes to write
  2620.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  2621. Return: CF clear if successful
  2622.         AX = number of bytes actually written
  2623.     CF set on error
  2624.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2625. SeeAlso: AX=4403h"ST-01"
  2626. --------d-214405-----------------------------
  2627. INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  2628.     AX = 4405h
  2629.     BL = drive number (00h = default, 01h = A:, etc)
  2630.     CX = 000Ah (size of DSPACKET structure)
  2631.     DS:DX -> DSPACKET structure (see below)
  2632. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2633.         AX = number of bytes actually transferred
  2634.     CF set on error
  2635.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2636. Note:    this call is identical to the documented AX=4404h
  2637. SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2638.  
  2639. Format of DSPACKET structure:
  2640. Offset    Size    Description
  2641.  00h    WORD    signature 444Dh ("DM")
  2642.  02h    BYTE    command code
  2643.          46h ('F') flush internal caches
  2644.         49h ('I') flush and invalidate internal caches
  2645.  03h    WORD    result code
  2646.          (return) 4F4Bh ("OK") if successful, else unchanged
  2647.  05h  5 BYTEs    padding
  2648. --------d-214405-----------------------------
  2649. INT 21 U - xDISK v3.31 - ???
  2650.     AX = 4405h
  2651.     BL = drive number (00h = default, 01h = A:, etc)
  2652.     CX = number of bytes to write
  2653.     DS:DX -> buffer containing version string
  2654.     ???
  2655. Return: CF clear if successful
  2656.         AX = number of bytes actually transferred
  2657.     CF set on error
  2658.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2659. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  2660. SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh"xDISK"
  2661. --------D-214406-----------------------------
  2662. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  2663.     AX = 4406h
  2664.     BX = file handle
  2665. Return: CF clear if successful
  2666.         AL = input status
  2667.         00h not ready (device) or at EOF (file)
  2668.         FFh ready
  2669.     CF set on error
  2670.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2671. Note:    files may not register as being at EOF if positioned there by AH=42h
  2672. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  2673. --------D-214407-----------------------------
  2674. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  2675.     AX = 4407h
  2676.     BX = file handle
  2677. Return: CF clear if successful
  2678.         AL = input status
  2679.         00h not ready
  2680.         FFh ready
  2681.     CF set on error
  2682.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2683. Note:    for DOS 2+, files are always ready for output, even if the disk is
  2684.       full or no media is in the drive
  2685. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  2686. --------D-214408-----------------------------
  2687. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  2688.     AX = 4408h
  2689.     BL = drive number (00h = default, 01h = A:, etc)
  2690. Return: CF clear if successful
  2691.         AX = 0000h if removable
  2692.            = 0001h if fixed
  2693.     CF set on error
  2694.         AX = error code (01h,0Fh) (see AH=59h)
  2695. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  2696. --------D-214409-----------------------------
  2697. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  2698.     AX = 4409h
  2699.     BL = drive number (00h = default, 01h = A:, etc)
  2700. Return: CF clear if successful
  2701.         DX = device attribute word
  2702.         bit 15: drive is SUBSTituted
  2703.         bit 12: drive is remote
  2704.         bit  9: direct I/O not allowed
  2705.     CF set on error
  2706.         AX = error code (01h,0Fh) (see AH=59h)
  2707. Note:    on local drives, DX bits not listed above are the attribute word from
  2708.       the device driver header (see AH=52h); for remote drives, the other
  2709.       bits appear to be undefined for DOS versions prior to 5.0 (they are
  2710.       all cleared in DOS 5+)
  2711. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  2712. --------D-21440A-----------------------------
  2713. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  2714.     AX = 440Ah
  2715.     BX = handle
  2716. Return: CF clear if successful
  2717.         DX = attribute word (as stored in SFT)
  2718.         bit 15: set if remote
  2719.         bit 14: date/time not set on close
  2720.     CF set on error
  2721.         AX = error code (01h,06h) (see AH=59h)
  2722. Notes:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  2723.       the file server on which the handle is located in CX
  2724.     DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15
  2725. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  2726. --------D-21440B-----------------------------
  2727. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  2728.     AX = 440Bh
  2729.     CX = pause between retries (default 1)
  2730.     DX = number of retries (default 3)
  2731. Return: CF clear if successful
  2732.     CF set on error
  2733.         AX = error code (01h) (see AH=59h)
  2734. Notes:    delay is dependent on processor speed (value in CX specifies number of
  2735.       64K-iteration empty loops to execute)
  2736.     if DX=0000h on entry, the retry count is left unchanged
  2737. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  2738. --------D-21440C-----------------------------
  2739. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  2740.     AX = 440Ch
  2741.     BX = device handle
  2742.     CH = category code
  2743.         00h unknown (DOS 3.3+)
  2744.         01h COMn: (DOS 3.3+)
  2745.         03h CON (DOS 3.3+)
  2746.         05h LPTn:
  2747.         9Eh Media Access Control driver (STARLITE)
  2748.         00h-7Fh reserved for Microsoft
  2749.         80h-FFh reserved for OEM/user-defined
  2750.     CL = function
  2751.         00h MAC driver Bind (STARLITE)
  2752.         45h set iteration (retry) count
  2753.         4Ah select code page
  2754.         4Ch start code-page preparation
  2755.         4Dh end code-page preparation
  2756.         5Fh set display information (DOS 4+)
  2757.         65h get iteration (retry) count
  2758.         6Ah query selected code page
  2759.         6Bh query prepare list
  2760.         7Fh get display information (DOS 4+)
  2761.     DS:DX -> parameter block (see below)
  2762.     SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  2763.     DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  2764. Return: CF set on error
  2765.         AX = error code (see AH=59h)
  2766.     CF clear if successful
  2767.         DS:DX -> iteration count if CL=65h
  2768.         SI = returned value (European MS-DOS 4.0, OS/2 comp box)
  2769.         DI = returned value (European MS-DOS 4.0, OS/2 comp box)
  2770. Notes:    bit assignments for function code in CL:
  2771.         bit 7: set to ignore if unsupported, clear to return error
  2772.         bit 6: set if passed to driver, clear if intercepted by DOS
  2773.         bit 5: set if queries data from device, clear if sends command
  2774.         bits 4-0: subfunction
  2775.     DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
  2776.       does not support a retry counter
  2777. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
  2778. SeeAlso: INT 2F/AX=1A01h
  2779.  
  2780. Format of parameter block for function 00h:
  2781. Offset    Size    Description
  2782.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  2783.  08h    WORD    version
  2784.  0Ah    WORD    flags
  2785.         bit 0: media requires connect or listen request before use
  2786.         bit 1: network is a LAN (broadcast/multicast supported)
  2787.         bit 2: point-to-point network
  2788.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  2789.         by MAC driver)
  2790.  0Eh    WORD    context
  2791.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  2792.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  2793.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  2794.  16h    WORD    addressing format (filled in by MAC driver)
  2795.         0000h general addressing
  2796.         0001h Ethernet addressing
  2797.         0002h Token Ring addressing
  2798.         0003h Token Bus addressing
  2799.  18h    DWORD    Send entry point (filled in by MAC driver)
  2800.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  2801.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  2802.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  2803.  
  2804. Format of parameter block for function 45h:
  2805. Offset    Size    Description
  2806.  00h    WORD    number of times output is attempted before driver assumes
  2807.         device is busy
  2808.  
  2809. Format of parameter block for functions 4Ah and 6Ah:
  2810. Offset    Size    Description
  2811.  00h    WORD    length of data
  2812.  02h    WORD    code page ID
  2813.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  2814.           start/end for each of N ranges (DOS 4.0)
  2815.     WORD    0000h  end of data (DOS 4.0)
  2816.  
  2817. Format of parameter block for function 4Ch:
  2818. Offset    Size    Description
  2819.  00h    WORD    flags
  2820.         DISPLAY.SYS = 0000h
  2821.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  2822.             prepare cartridge selection
  2823.  02h    WORD    length of remainder of parameter block
  2824.  04h    WORD    number of code pages following
  2825.  06h  N WORDs    code page 1,...,N
  2826.  
  2827. Format of parameter block for function 4Dh:
  2828. Offset    Size    Description
  2829.  00h    WORD    length of data
  2830.  02h    WORD    code page ID
  2831.  
  2832. Format of parameter block for functions 5Fh and 7Fh:
  2833. Offset    Size    Description
  2834.  00h    BYTE    level (0 for DOS 4.x-6.0)
  2835.  01h    BYTE    reserved (0)
  2836.  02h    WORD    length of following data (14)
  2837.  04h    WORD    control flags
  2838.           bit 0 set for blink, clear for intensity
  2839.           bits 1 to 15 reserved
  2840.  06h    BYTE    mode type (1=text, 2=graphics)
  2841.  07h    BYTE    reserved (0)
  2842.  08h    WORD    colors
  2843.            0 = monochrome
  2844.            else N bits per pixel
  2845.  0Ah    WORD    pixel columns
  2846.  0Ch    WORD    pixel rows
  2847.  0Eh    WORD    character columns
  2848.  10h    WORD    character rows
  2849.  
  2850. Format of parameter block for function 6Bh:
  2851. Offset    Size    Description
  2852.  00h    WORD    length of following data
  2853.  02h    WORD    number of hardware code pages
  2854.  04h  N WORDs    hardware code pages 1,...,N
  2855.     WORD    number of prepared code pages
  2856.       N WORDs    prepared code pages 1,...,N
  2857. --------d-21440C-----------------------------
  2858. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  2859.     AX = 440Ch
  2860.     BX = device handle
  2861.     CH = category code
  2862.         07h tape (ASPITAPE.SYS)
  2863.     CL = function
  2864.         01h "mtop" - perform tape operation
  2865.         02h "mtget" - get tape status
  2866.         03h ignore end-of-tape errors
  2867.         04h enable end-of-tape errors
  2868.     DS:DX -> parameter block (see below)
  2869. Return: CF set on error
  2870.         AX = error code (see AH=59h)
  2871.     CF clear if successful
  2872.         DS:DX -> data block
  2873. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  2874.       SCSI Programming Interface (ASPI).  It provides the following device
  2875.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  2876.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  2877.       also be the following names 'MTx' and 'NMTx' which default to 1024
  2878.       byte blocks.    The names may also have a '$' appended to try and make
  2879.       them unique from file names of 'RMT0' etc.
  2880.     once opend these devices must be put into RAW mode
  2881. SeeAlso: AX=4402h"ASPI"
  2882.  
  2883. Format of mtop parameter block:
  2884. Offset    Size    Description
  2885.  00h    WORD    operation code
  2886.         00h "MTWEOF" - write an end-of-file record
  2887.         01h "MTFSF" - forward space file
  2888.         02h "MTBSF" - backward space file
  2889.         03h "MTFSR" - forward space record
  2890.         04h "MTBSR" - backward space record
  2891.         05h "MTREW" - rewind
  2892.         06h "MTOFFL" - rewind and unload
  2893.         07h "MTNOP" - perform TEST UNIT READY
  2894.  02h    DWORD    repetition count
  2895.  
  2896. Format of mtget parameter block:
  2897. Offset    Size    Description
  2898.  00h    BYTE    ASPI host ID
  2899.  01h    BYTE    SCSI target ID
  2900.  02h    BYTE    SCSI logical unit number
  2901.  03h    BYTE    device parameters
  2902.         bit 0: drive must use fixed-block read and write
  2903.         bit 7: drive is an ASPI device
  2904.  04h    BYTE    current device state (see below)
  2905.  05h    BYTE    unit number within driver
  2906.  06h    WORD    fixed block blocksize
  2907.  08h    BYTE    last SCSI status
  2908.  09h    BYTE    last SCSI sense key
  2909.  0Ah    WORD    last SCSI opcode (packed)
  2910.         bits 0-7: SCSI operation (SCSI packet byte 0)
  2911.         bits 8-10: SCSI flags (SCSI packet byte 1)
  2912.         bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
  2913.  0Ch    WORD    residual bytes from SCSI opcode
  2914.  
  2915. Bitfields for current device state:
  2916.  bit 0    device currently opened in buffered mode
  2917.  bit 1    drive currently opened in nonbuffered mode
  2918.  bit 2    rewind drive on last close
  2919.  bit 3    drive has been written on
  2920.  bit 4    drive has been read from
  2921.  bit 5    next read will return 0 bytes
  2922.  bit 6    EOM will resemble EOF
  2923.  bit 7    drive may be busy rewinding
  2924. --------D-21440D-----------------------------
  2925. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  2926.     AX = 440Dh
  2927.     BL = drive number (00h=default,01h=A:,etc)
  2928.     CH = category code
  2929.         08h disk drive
  2930.         00h-7Fh reserved for Microsoft
  2931.         80h-FFh reserved for OEM/user-defined
  2932.     CL = minor code (function) (see below)
  2933.     DS:DX -> (DOS) parameter block (see below)
  2934.     SI:DI -> (OS/2 comp box) parameter block (see below)
  2935. Return: CF set on error
  2936.         AX = error code (01h,02h) (see AH=59h)
  2937.     CF clear if successful
  2938.         DS:DX -> data block if CL=60h or CL=61h
  2939. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  2940.       entries in the BPB for diskettes.
  2941.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+
  2942.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  2943.     DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
  2944.       other minor codes return error code 16h
  2945. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  2946.  
  2947. Values for minor code:
  2948.  00h (OS/2)    \ used to lock/unlock a drive
  2949.  01h (OS/2)    /
  2950.  40h set device parameters
  2951.  41h write logical device track
  2952.  42h format and verify logical device track
  2953.  46h (DOS 4+) set volume serial number (see also AH=69h)
  2954.  47h (DOS 4+) set access flag
  2955.  50h (PCMCIA) attribute memory write
  2956.  51h (PCMCIA) common memory write
  2957.  52h (PCMCIA) force media change
  2958.  53h (PCMCIA) erase drive
  2959.  54h (PCMCIA) erase media
  2960.  56h (PCMCIA) set erase status callback
  2961.  57h (PCMCIA) append Card Information Structure (CIS) tuple
  2962.  58h (PCMCIA) erase CIS tuples
  2963.  60h get device parameters
  2964.  61h read logical device track
  2965.  62h verify logical device track
  2966.  66h (DOS 4+) get volume serial number (see also AH=69h)
  2967.  67h (DOS 4+) get access flag
  2968.  68h (DOS 5+) sense media type
  2969.  70h (PCMCIA) attribute memory read
  2970.  73h (PCMCIA) get memory media information
  2971.  76h (PCMCIA) get erase status callback
  2972.  77h (PCMCIA) get first Card Information Structure (CIS) tuple
  2973.  78h (PCMCIA) get next CIS tuple
  2974.  
  2975. Format of parameter block for functions 40h, 60h:
  2976. Offset    Size    Description
  2977.  00h    BYTE    special functions
  2978.         bit 0 set if function to use current BPB, clear if Device
  2979.             BIOS Parameter Block field contains new default BPB
  2980.         bit 1 set if function to use track layout fields only
  2981.             must be clear if CL=60h
  2982.         bit 2 set if all sectors in track same size (should be set)
  2983.         bits 3-7 reserved
  2984.  01h    BYTE    device type (see below)
  2985.  02h    WORD    device attributes
  2986.         bit 0 set if nonremovable medium
  2987.         bit 1 set if door lock ("changeline") supported
  2988.         bits 2-15 reserved
  2989.  04h    WORD    number of cylinders
  2990.  06h    BYTE    media type
  2991.         for 1.2M drive
  2992.             00h 1.2M disk (default)
  2993.             01h 320K/360K disk
  2994.         F8h for DUBLDISK.SYS v2.6 expanded drives
  2995.         always 00h for other drive types
  2996.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  2997. ---function 40h only---
  2998.  26h    WORD    number of sectors per track (start of track layout field)
  2999.          max 63
  3000.  28h  N word pairs: number,size of each sector in track
  3001.  
  3002. Values for device type:
  3003.  00h  320K/360K disk
  3004.  01h  1.2M disk
  3005.  02h  720K disk
  3006.  03h  single-density 8-inch disk
  3007.  04h  double-density 8-inch disk
  3008.  05h  fixed disk
  3009.  06h  tape drive
  3010.  07h  (DOS 3.3+) other type of block device, normally 1.44M floppy
  3011.  08h  read/write optical disk
  3012.  09h  (DOS 5+) 2.88M floppy
  3013.  
  3014. Format of parameter block for functions 41h, 61h:
  3015. Offset    Size    Description
  3016.  00h    BYTE    special functions (reserved, must be zero)
  3017.  01h    WORD    number of disk head
  3018.  03h    WORD    number of disk cylinder
  3019.  05h    WORD    number of first sector to read/write
  3020.  07h    WORD    number of sectors
  3021.  09h    DWORD    transfer address
  3022.  
  3023. Format of parameter block for function 42h:
  3024. Offset    Size    Description
  3025.  00h    BYTE    reserved, must be zero (DOS <3.2)
  3026.           bit 0=0: format/verify track
  3027.             1: format status call (DOS 3.2+), don't actually format
  3028.           bits 1-7 reserved, must be zero
  3029.         on return (DOS 4.x):
  3030.           bit 0: set if specified tracks, sectors/track supported
  3031.           bit 1: set if function not supported by BIOS
  3032.           bit 2: set if specified tracks, sectors/track not supported
  3033.           bit 3: set if no disk in drive
  3034.  01h    WORD    number of disk head
  3035.  03h    WORD    number of disk cylinder
  3036.  
  3037. Format of parameter block for function 62h:
  3038. Offset    Size    Description
  3039.  00h    BYTE    reserved, must be zero (DOS <3.2)
  3040.           bit 0=0: verify single track
  3041.             1: verify multiple tracks
  3042.           bits 1-7 reserved, must be zero
  3043.         on return (DOS 4.x):
  3044.           bit 0: set if specified tracks, sectors/track supported
  3045.           bit 1: set if function not supported by BIOS
  3046.           bit 2: set if specified tracks, sectors/track not supported
  3047.           bit 3: set if no disk in drive
  3048.  01h    WORD    number of disk head
  3049.  03h    WORD    number of disk cylinder
  3050.  05h    WORD    number of tracks to verify (equivalent to 255 or fewer sectors)
  3051.  
  3052. Format of parameter block for functions 46h, 66h:
  3053. Offset    Size    Description
  3054.  00h    WORD    (call) info level (should be 0000h)
  3055.  02h    DWORD    disk serial number (binary)
  3056.  06h 11 BYTEs    volume label or "NO NAME    "
  3057.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  3058.  
  3059. Format of parameter block for functions 47h, 67h:
  3060. Offset    Size    Description
  3061.  00h    BYTE    special-function field (must be zero)
  3062.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  3063.  
  3064. Format of parameter block for function 68h:
  3065. Offset    Size    Description
  3066.  00h    BYTE    01h for default media type, 00h for any other media type
  3067.          (see also INT 13/AH=20h)
  3068.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  3069. --------D-21440E-----------------------------
  3070. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  3071.     AX = 440Eh
  3072.     BL = drive number (00h=default,01h=A:,etc)
  3073. Return: CF set on error
  3074.         AX = error code (01h,0Fh) (see AH=59h)
  3075.     CF clear if successful
  3076.         AL = 00h block device has only one logical drive assigned
  3077.          1..26 the last letter used to reference the drive (1=A:,etc)
  3078. Note:    DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  3079.       always returns AL=00h
  3080. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  3081. --------D-21440F-----------------------------
  3082. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  3083.     AX = 440Fh
  3084.     BL = physical drive number (00h=default,01h=A:,etc))
  3085. Return: CF set on error
  3086.         AX = error code (01h,0Fh) (see AH=59h)
  3087.     CF clear if successful
  3088.         drive now responds to next logical drive number
  3089. Notes:    maps logical drives to physical drives, similar to DOS's treatment of
  3090.       a single physical floppy drive as both A: and B:
  3091.     DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  3092.       always returns an error on this function
  3093. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  3094. --------D-214410-----------------------------
  3095. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  3096.     AX = 4410h
  3097.     BX = handle for device
  3098.     CH = category code (see AX=440Ch)
  3099.     CL = function code
  3100. Return: CF clear if successful
  3101.         AX = 0000h    specified IOCTL function is supported
  3102.     CF set on error
  3103.         AL = 01h    IOCTL capability not available
  3104. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3105.       standard DOS 3.2 set may use this call first to see whether a
  3106.       particular call is supported
  3107. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  3108. --------d-214410BXFFFF-----------------------
  3109. INT 21 U - NewSpace - ENABLE DRIVER
  3110.     AX = 4410h
  3111.     BX = FFFFh
  3112. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3113.       all files as they are written and decompresses them as they are read
  3114. Note:    compressed files are not accessible unless the driver is enabled
  3115. SeeAlso: AX=4411h/BX=FFFFh
  3116. --------D-214411-----------------------------
  3117. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  3118.     AX = 4411h
  3119.     BL = drive number
  3120.     CH = category code (see AX=440Dh)
  3121.     CL = function code
  3122. Return: CF clear if successful
  3123.         AX = 0000h    specified IOCTL function is supported
  3124.     CF set on error
  3125.         AL = 01h    IOCTL capability not available
  3126. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3127.       standard DOS 3.2 set may use this call first to see whether a
  3128.       particular call is supported
  3129. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  3130. --------d-214411BXFFFF-----------------------
  3131. INT 21 U - NewSpace - DISABLE DRIVER
  3132.     AX = 4411h
  3133.     BX = FFFFh
  3134. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3135.       all files as they are written and decompresses them as they are read
  3136. Note:    compressed files are not accessible unless the driver is enabled
  3137. SeeAlso: AX=4410h/BX=FFFFh
  3138. --------O-214412-----------------------------
  3139. INT 21 - DR-DOS 5+ - DETERMINE DOS TYPE
  3140.     AX = 4412h
  3141.     CF set
  3142. Return: CF set if not DR-DOS
  3143.         AX = error code (see AH=59h)
  3144.     CF clear if DR-DOS
  3145.         DX = AX = version code (see AX=4452h)
  3146. Note:    this obsolete call which will not be supported in future versions of
  3147.       DR-DOS is identical to AX=4452h
  3148. SeeAlso: AX=4452h
  3149. --------d-214412BXFFFF-----------------------
  3150. INT 21 U - NewSpace - INSTALLATION CHECK???
  3151.     AX = 4412h
  3152.     BX = FFFFh
  3153. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  3154.     BX:DX -> ???
  3155.     CX = ???
  3156. SeeAlso: AX=4411h/BX=FFFFh
  3157. --------d-214413BXFFFF-----------------------
  3158. INT 21 U - NewSpace - GET ???
  3159.     AX = 4413h
  3160.     BX = FFFFh
  3161. Return: AX = code segment of NewRes (resident driver for NewSpace)
  3162.     BX = offset of ???
  3163. SeeAlso: AX=4412h/BX=FFFFh
  3164. --------O-214414-----------------------------
  3165. INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD
  3166.     AX = 4414h
  3167.     DS:DX -> password string (blank-padded to 8 characters)
  3168. Desc:    Specify the master password for accessing files.
  3169. Note:    this obsolete call which will not be supported in future versions of
  3170.       DR-DOS is identical to AX=4452h
  3171. SeeAlso: AX=4454h
  3172. --------d-214414BXFFFF-----------------------
  3173. INT 21 U - NewSpace - DEBUGGING DUMP
  3174.     AX = 4414h
  3175.     BX = FFFFh
  3176. Return:    debugging dump written to X:\NEWSPACE.SMP
  3177. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  3178. --------O-2144-------------------------------
  3179. INT 21 U - DR-DOS 5.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  3180.     AH = 44h
  3181.     AL = 16h to 18h
  3182. Note:    these obsolete subfunctions (which will not be supported in future
  3183.       versions of DR-DOS) are identical to AX=4456h through 4458h
  3184. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  3185. --------O-214451-----------------------------
  3186. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  3187.     AX = 4451h
  3188. Return: CF set if not Concurrent DOS
  3189.         AX = error code (see AH=59h)
  3190.     CF clear if successful
  3191.         AH = single-user/multiuser nature
  3192.         10h single-user
  3193.             AL = operating system version ID (see AX=4452h)
  3194.         14h multiuser
  3195.             AL = operating system version ID (see below)
  3196. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  3197.       in the environment variable VER
  3198.     use this function if you are looking for multiuser capabilities,
  3199.       AX=4452h for single-user
  3200.     this function should never return the single-user values
  3201. SeeAlso: AX=4452h,AX=4459h
  3202.  
  3203. Values for operating system version ID:
  3204.  32h Concurrent PC DOS 3.2
  3205.  41h Concurrent DOS 4.1
  3206.  50h Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  3207.  60h Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  3208.  62h Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  3209.  66h DR Multiuser DOS 5.1
  3210.  67h Concurrent DOS 5.1
  3211. --------O-214452-----------------------------
  3212. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  3213.     AX = 4452h ("DR")
  3214.     CF set
  3215. Return: CF set if not DR-DOS
  3216.         AX = error code (see AH=59h)
  3217.     CF clear if DR-DOS
  3218.         DX = AX = version code
  3219.         AH = single-user/multiuser nature
  3220.         10h single-user
  3221.             AL = operating system version ID (see below)
  3222.         14h multiuser
  3223.             AL = operating system version ID (see AX=4451h)
  3224. Notes:    the DR-DOS version is stored in the environment variable VER
  3225.     use this function if looking for single-user capabilities, AX=4451h
  3226.       if looking for multiuser; this call should never return multiuser
  3227.       values
  3228. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  3229.  
  3230. Values for operating system version ID:
  3231.  60h DOS Plus
  3232.  63h DR-DOS 3.41
  3233.  64h DR-DOS 3.42
  3234.  65h DR-DOS 5.00
  3235.  67h DR-DOS 6.00
  3236.  70h PalmDOS
  3237.  71h DR-DOS 6.0 March 1993 "business update"
  3238.  72h Novell DOS 7.0
  3239. --------O-214454-----------------------------
  3240. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  3241.     AX = 4454h
  3242.     DS:DX -> password string (blank-padded to 8 characters)
  3243. Desc:    Specify the master password for accessing files.
  3244. SeeAlso: AX=4303h,AX=4414h
  3245. --------O-214456-----------------------------
  3246. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  3247.     AX = 4456h
  3248.     DL = flag
  3249.         bit 0: 1 = COMMAND.COM history buffers
  3250.            0 = set to application
  3251. Return: AL = ??? (20h if DL bit 0 set, A0h if clear (DR-DOS 6.0))
  3252. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  3253. --------O-214457-----------------------------
  3254. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  3255.     AX = 4457h
  3256.     DH = subfunction
  3257.         00h enable/disable SHARE
  3258.         DL = 00h disable
  3259.            = 01h enable
  3260.            else Return: AX = ???
  3261.         01h get HILOAD status
  3262.         Return: AX = status
  3263.                 0000h off
  3264.                 0001h on
  3265.         02h set HILOAD status
  3266.         DL = new state (00h off, 01h on)
  3267.         Return: AX = ???
  3268.         other
  3269.         Return: AX = ???
  3270. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  3271. SeeAlso: AX=4457h/DX=FFFFh
  3272. --------O-214457DXFFFF-----------------------
  3273. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  3274.     AX = 4457h
  3275.     DX = FFFFh
  3276. Return: AX = SHARE status
  3277. SeeAlso: INT 2F/AX=1000h
  3278. --------O-214458-----------------------------
  3279. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
  3280.     AX = 4458h
  3281. Return: ES:BX -> internal variable table (see below)
  3282.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
  3283. SeeAlso: AX=4452h
  3284.  
  3285. Format of internal variable table:
  3286. Offset    Size    Description
  3287.  00h    DWORD    pointer to ???
  3288.  04h  7 BYTEs    ???
  3289.  0Bh    WORD    K of extended memory at startup
  3290.  0Dh    BYTE    number of far jump entry points
  3291.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  3292. ---DR-DOS 6.0---
  3293.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  3294.         memory block (see below) or 0000h if none; segment is FFFFh
  3295.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  3296.         or 0000h if already used
  3297.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  3298.         memory block (see below) or 0000h if none; segment is FFFFh
  3299. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  3300.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  3301.       called from CONFIG.SYS. The word is set to zero later and the area
  3302.       lost.
  3303.  
  3304. Format of kernel entry jump table for DR-DOS 5.0-6.0:
  3305. Offset    Size    Description
  3306.  00h  5 BYTEs    far jump to kernel entry point for CP/M CALL 5
  3307.  05h  5 BYTEs    far jump to kernel entry point for INT 20
  3308.  0Ah  5 BYTEs    far jump to kernel entry point for INT 21
  3309.  0Fh  5 BYTEs    far jump to kernel entry point for INT 22??? (RETF)
  3310.  14h  5 BYTEs    far jump to kernel entry point for INT 23??? (RETF)
  3311.  19h  5 BYTEs    far jump to kernel entry point for INT 24
  3312.  1Eh  5 BYTEs    far jump to kernel entry point for INT 25
  3313.  23h  5 BYTEs    far jump to kernel entry point for INT 26
  3314.  28h  5 BYTEs    far jump to kernel entry point for INT 27
  3315.  2Dh  5 BYTEs    far jump to kernel entry point for INT 28
  3316.  32h  5 BYTEs    far jump to kernel entry point for INT 2A (IRET)
  3317.  37h  5 BYTEs    far jump to kernel entry point for INT 2B (IRET)
  3318.  3Ch  5 BYTEs    far jump to kernel entry point for INT 2C (IRET)
  3319.  41h  5 BYTEs    far jump to kernel entry point for INT 2D (IRET)
  3320.  46h  5 BYTEs    far jump to kernel entry point for INT 2E (IRET)
  3321.  4Bh  5 BYTEs    far jump to kernel entry point for INT 2F
  3322. Note:    all of these entry points are indirected through this jump table
  3323.       to allow the kernel to be relocated into high memory while leaving
  3324.       the actual entry addresses in low memory for maximum compatibility
  3325.  
  3326. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  3327. Offset    Size    Description
  3328.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  3329.  02h    WORD    size of this block in bytes (at least 10h)
  3330.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  3331.         00h system
  3332.         01h KEYB
  3333.         02h NLSFUNC
  3334.         03h SHARE
  3335.         04h TaskMAX
  3336.         05h COMMAND
  3337.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  3338.         hooks interrupts using segment FFFEh instead FFFFh.
  3339. --------O-214459-----------------------------
  3340. INT 21 - DR MultiUser DOS 5.0 - API
  3341.     AX = 4459h
  3342.     CL = function (see INT E0"CP/M")
  3343.     DS,DX = parameters
  3344. Notes:    DR-DOS 5.0 returns CF set and AX=0001h
  3345.     this API is also available on INT E0
  3346. SeeAlso: AX=4452h,INT E0"CP/M"
  3347. --------d-2144FFBXFFFF-----------------------
  3348. INT 21 U - NewSpace - ???
  3349.     AX = 44FFh
  3350.     BX = FFFFh
  3351.     DX = ???
  3352. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3353.       all files as they are written and decompresses them as they are read
  3354. SeeAlso: AX=4414h/BX=FFFFh
  3355. --------D-2145-------------------------------
  3356. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  3357.     AH = 45h
  3358.     BX = file handle
  3359. Return: CF clear if successful
  3360.         AX = new handle
  3361.     CF set on error
  3362.         AX = error code (04h,06h) (see AH=59h)
  3363. Notes:    moving file pointer for either handle will also move it for the other,
  3364.       because both will refer to the same system file table
  3365.     for DOS versions prior to 3.3, file writes may be forced to disk by
  3366.       duplicating the file handle and closing the duplicate
  3367. SeeAlso: AH=3Dh,AH=46h
  3368. --------D-2146-------------------------------
  3369. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  3370.     AH = 46h
  3371.     BX = file handle
  3372.     CX = file handle to become duplicate of first handle
  3373. Return: CF clear if successful
  3374.     CF set on error
  3375.         AX = error code (04h,06h) (see AH=59h)
  3376. Notes:    closes file with handle CX if it is still open
  3377.     DOS 3.30 hangs if BX=CX on entry
  3378.     moving file pointer for either handle will also move it for the other,
  3379.       because both will refer to the same system file table
  3380. SeeAlso: AH=3Dh,AH=45h
  3381. --------D-2147-------------------------------
  3382. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  3383.     AH = 47h
  3384.     DL = drive number (00h = default, 01h = A:, etc)
  3385.     DS:SI -> 64-byte buffer for ASCIZ pathname
  3386. Return: CF clear if successful
  3387.         AX = 0100h (undocumented)
  3388.     CF set on error
  3389.         AX = error code (0Fh) (see AH=59h)
  3390. Notes:    the returned path does not include a drive or the initial backslash
  3391.     many Microsoft products for Windows rely on AX being 0100h on success
  3392.     under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
  3393. SeeAlso: AH=19h,AH=3Bh,INT 15/AX=DE25h
  3394. --------D-2148-------------------------------
  3395. INT 21 - DOS 2+ - ALLOCATE MEMORY
  3396.     AH = 48h
  3397.     BX = number of paragraphs to allocate
  3398. Return: CF clear if successful
  3399.         AX = segment of allocated block
  3400.     CF set on error
  3401.         AX = error code (07h,08h) (see AH=59h)
  3402.         BX = size of largest available block
  3403. Notes:    DOS 2.1-6.0 coalesces free blocks while scanning for a block to
  3404.       allocate
  3405.     .COM programs are initially allocated the largest available memory
  3406.       block, and should free some memory with AH=49h before attempting any
  3407.       allocations
  3408.     under the FlashTek X-32 DOS extender, EBX contains a protected-mode
  3409.       near pointer to the allocated block on a successful return
  3410. SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
  3411. --------D-2149-------------------------------
  3412. INT 21 - DOS 2+ - FREE MEMORY
  3413.     AH = 49h
  3414.     ES = segment of block to free
  3415. Return: CF clear if successful
  3416.     CF set on error
  3417.         AX = error code (07h,09h) (see AH=59h)
  3418. Notes:    apparently never returns an error 07h, despite official docs; DOS 3.30
  3419.       code contains only an error 09h exit
  3420.     DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
  3421.       freed, only when a block is allocated or resized
  3422.     the code for this function is identical in DOS 2.1-6.0 except for
  3423.       calls to start/end a critical section in DOS 3+
  3424. SeeAlso: AH=48h,AH=4Ah
  3425. --------D-214A-------------------------------
  3426. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  3427.     AH = 4Ah
  3428.     BX = new size in paragraphs
  3429.     ES = segment of block to resize
  3430. Return: CF clear if successful
  3431.     CF set on error
  3432.         AX = error code (07h,08h,09h) (see AH=59h)
  3433.         BX = maximum paragraphs available for specified memory block
  3434. Notes:    under DOS 2.1-5.0, if there is insufficient memory to expand the block
  3435.       as much as requested, the block will be made as large as possible
  3436.     DOS 2.1-5.0 coalesces any free blocks immediately following the block
  3437.       to be resized
  3438. SeeAlso: AH=48h,AH=49h,AH=83h
  3439. --------D-214B-------------------------------
  3440. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  3441.     AH = 4Bh
  3442.     AL = type of load
  3443.         00h load and execute
  3444.         01h load but do not execute
  3445.         03h load overlay
  3446.         04h load and execute in background (European MS-DOS 4.0 only)
  3447.         "Exec & Go" (see also AH=80h)
  3448.     DS:DX -> ASCIZ program name (must include extension)
  3449.     ES:BX -> parameter block (see below)
  3450.     CX = mode (subfunction 04h only)
  3451.         0000h child placed in zombie mode after termination
  3452.         0001h child's return code discarded on termination
  3453. Return: CF clear if successful
  3454.         BX,DX destroyed
  3455.         if subfunction 01h, process ID set to new program's PSP; get with
  3456.         INT 21/AH=62h
  3457.     CF set on error
  3458.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  3459. Notes:    DOS 2.x destroys all registers, including SS:SP
  3460.     under ROM-based DOS, if no disk path characters (colons or slashes)
  3461.       are included in the program name, the name is searched for in the
  3462.       ROM module headers (see below) before searching on disk
  3463.     for functions 00h and 01h, the calling process must ensure that there
  3464.       is enough unallocated memory available; if necessary, by releasing
  3465.       memory with AH=49h or AH=4Ah
  3466.     for function 01h, the AX value to be passed to the child program is put
  3467.       on top of the child's stack
  3468.     for function 03h, DOS assumes that the overlay is being loaded into
  3469.       memory allocated by the caller
  3470.     function 01h was undocumented prior to the release of DOS 5.0
  3471.     some versions (such as DR-DOS 6.0) check the parameters and parameter
  3472.       block and return an error if an invalid value (such as an offset of
  3473.       FFFFh) is found
  3474.     background programs under European MS-DOS 4.0 must use the new
  3475.       executable format
  3476.     new executables begin running with the following register values
  3477.         AX = environment segment
  3478.         BX = offset of command tail in environment segment
  3479.         CX = size of automatic data segment (0000h = 64K)
  3480.         ES,BP = 0000h
  3481.         DS = automatic data segment
  3482.         SS:SP = initial stack
  3483.       the command tail corresponds to an old executable's PSP:0081h and
  3484.       following, except that the 0Dh is turned into a NUL (00h); new
  3485.       format executables have no PSP
  3486.     under the FlashTek X-32 DOS extender, only function 00h is supported
  3487.       and the pointers are passed in DS:EDX and ES:EBX
  3488.     DR-DOS 6 always loads .EXE-format programs with no fixups above the
  3489.       64K mark to avoid the EXEPACK bug
  3490.     names for the various executable type understood by various
  3491.       environments:
  3492.           MZ  old-style DOS executable
  3493.         NE  Windows or OS/2 1.x segmented ("new") executable
  3494.         LE  Windows virtual device driver (VxD) linear executable
  3495.         LX  variant of LE used in OS/2 2.x
  3496.         W3  Windows WIN386.EXE file; a collection of LE files
  3497.         PE  Win32 (Windows NT and Win32s) portable executable based on
  3498.             Unix COFF
  3499. BUGS:    DOS 2.00 assumes that DS points at the current program's PSP
  3500.     Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  3501.       file contains additional data after the actual overlay
  3502. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
  3503.  
  3504. Format of EXEC parameter block for AL=00h,01h,04h:
  3505. Offset    Size    Description
  3506.  00h    WORD    segment of environment to copy for child process (copy caller's
  3507.         environment if 0000h)
  3508.  02h    DWORD    pointer to command tail to be copied into child's PSP
  3509.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  3510.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  3511.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  3512.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  3513.  
  3514. Format of EXEC parameter block for AL=03h:
  3515. Offset    Size    Description
  3516.  00h    WORD    segment at which to load overlay
  3517.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  3518.  
  3519. Format of EXEC parameter block for FlashTek X-32:
  3520. Offset    Size    Description
  3521.  00h    PWORD    48-bit far pointer to environment string
  3522.  06h    PWORD    48-bit far pointer to command tail string
  3523.  
  3524. Format of .EXE file header:
  3525. Offset    Size    Description
  3526.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  3527.  02h    WORD    number of bytes in last 512-byte page of executable
  3528.  04h    WORD    total number of 512-byte pages in executable (includes any
  3529.         partial last page)
  3530.  06h    WORD    number of relocation entries
  3531.  08h    WORD    header size in paragraphs
  3532.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  3533.         executable's size
  3534.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  3535.  0Eh    WORD    initial SS relative to start of executable
  3536.  10h    WORD    initial SP
  3537.  12h    WORD    checksum (one's complement of sum of all words in executable)
  3538.  14h    DWORD    initial CS:IP relative to start of executable
  3539.  18h    WORD    offset within header of relocation table
  3540.          40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
  3541.  1Ah    WORD    overlay number (normally 0000h = main program)
  3542. ---new executable---
  3543.  1Ch  4 BYTEs    ???
  3544.  20h    WORD    behavior bits
  3545.  22h 26    BYTEs    reserved for additional behavior info
  3546.  3Ch    DWORD    offset of new executable (NE,LE,etc) header within disk file,
  3547.          or 00000000h if plain MZ executable
  3548. ---Borland TLINK---
  3549.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  3550.  1Eh    BYTE    signature FBh
  3551.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  3552.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  3553. ---ARJ self-extracting archive---
  3554.  1Ch  4 BYTEs    signature "RJSX" (older versions, new signature is "aRJsfX" in
  3555.         the first 1000 bytes of the file)
  3556. ---LZEXE 0.90 compressed executable---
  3557.  1Ch  4 BYTEs    signature "LZ09"
  3558. ---LZEXE 0.91 compressed executable---
  3559.  1Ch  4 BYTEs    signature "LZ91"
  3560. ---PKLITE compressed executable---
  3561.  1Ch    BYTE    minor version number
  3562.  1Dh    BYTE    bits 0-3: major version
  3563.          bit 4: extra compression
  3564.         bit 5: huge (multi-segment) file
  3565.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  3566. ---LHarc 1.x self-extracting archive---
  3567.  1Ch  4 BYTEs    unused???
  3568.  20h  3 BYTEs    jump to start of extraction code
  3569.  23h  2 BYTEs    ???
  3570.  25h 12 BYTEs    signature "LHarc's SFX "
  3571. ---LHA 2.x self-extracting archive---
  3572.  1Ch  8 BYTEs    ???
  3573.  24h 10 BYTEs    signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  3574. ---TopSpeed C 3.0 CRUNCH compressed file---
  3575.  1Ch    DWORD    018A0001h
  3576.  20h    WORD    1565h
  3577. ---PKARCK 3.5 self-extracting archive---
  3578.  1Ch    DWORD    00020001h
  3579.  20h    WORD    0700h
  3580. ---BSA (Soviet archiver) self-extracting archive---
  3581.  1Ch    WORD    000Fh
  3582.  1Eh    BYTE    A7h
  3583. ---LARC self-extracting archive---
  3584.  1Ch  4 BYTEs    ???
  3585.  20h 11 BYTEs    "SFX by LARC "
  3586. ---LH self-extracting archive---
  3587.  1Ch  8 BYTEs    ???
  3588.  24h  8 BYTEs    "LH's SFX "
  3589. ---other linkers---
  3590.  1Ch    var    optional information
  3591. ---
  3592.   N   N DWORDs    relocation items
  3593. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  3594.       versions of the MS linker set it that way
  3595.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  3596.       program is loaded as high in memory as possible
  3597.     the maximum allocation is set to FFFFh by default
  3598.  
  3599. Format of ROM Module Header:
  3600. Offset    Size    Description
  3601.  00h  2 BYTEs    ROM signature 55h, AAh
  3602.  02h    BYTE    size of ROM in 512-byte blocks
  3603.  03h  3 BYTEs    POST initialization entry point (near JMP instruction)
  3604.  06h    ROM Program Name List [array]
  3605.      Offset    Size    Description
  3606.      00h    BYTE    length of ROM program's name (00h if end of name list)
  3607.      01h  N BYTEs    program name
  3608.      N+1  3 BYTEs    program entry point (near JMP instruction)
  3609.  
  3610. Format of new executable header:
  3611. Offset    Size    Description
  3612.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  3613.  02h  2 BYTEs    linker version (major, then minor)
  3614.  04h    WORD    offset from start of this header to entry table (see below)
  3615.  06h    WORD    length of entry table in bytes
  3616.  08h    DWORD    file load CRC (0 in Borland's TPW)
  3617.  0Ch    BYTE    program flags
  3618.         bits 0-1 DGROUP type
  3619.           0 = none
  3620.           1 = single shared
  3621.           2 = multiple (unshared)
  3622.           3 = (null)
  3623.         bit 2:    global initialization
  3624.         bit 3:    protected mode only
  3625.         bit 4:    8086 instructions
  3626.         bit 5:    80286 instructions
  3627.         bit 6:    80386 instructions
  3628.         bit 7:    80x87 instructions
  3629.  0Dh    BYTE    application flags
  3630.         bits 0-2: application type
  3631.             001 full screen (not aware of Windows/P.M. API)
  3632.             010 compatible with Windows/P.M. API
  3633.             011 uses Windows/P.M. API
  3634.         bit 3: is a Family Application (OS/2)
  3635.         bit 5: 0=executable, 1=errors in image
  3636.         bit 6: non-conforming program (valid stack is not maintained)
  3637.         bit 7: DLL or driver rather than application
  3638.             (SS:SP info invalid, CS:IP points at FAR init routine 
  3639.              called with AX=module handle which returns AX=0000h
  3640.              on failure, AX nonzero on successful initialization)
  3641.  0Eh    WORD    auto data segment index
  3642.  10h    WORD    initial local heap size
  3643.  12h    WORD    initial stack size (added to data seg, 0000h if SS != DS)
  3644.  14h    DWORD    program entry point (CS:IP), "CS" is index into segment table
  3645.  18h    DWORD    initial stack pointer (SS:SP), "SS" is segment index
  3646.         if SS=automatic data segment and SP=0000h, the stack pointer is
  3647.           set to the top of the automatic data segment, just below the
  3648.           local heap
  3649.  1Ch    WORD    segment count
  3650.  1Eh    WORD    module reference count
  3651.  20h    WORD    length of nonresident names table in bytes
  3652.  22h    WORD    offset from start of this header to segment table (see below)
  3653.  24h    WORD    offset from start of this header to resource table
  3654.  26h    WORD    offset from start of this header to resident names table
  3655.  28h    WORD    offset from start of this header to module reference table
  3656.  2Ah    WORD    offset from start of this header to imported names table
  3657.         (array of counted strings, terminated with a string of length
  3658.          00h)
  3659.  2Ch    DWORD    offset from start of file to nonresident names table
  3660.  30h    WORD    count of moveable entry point listed in entry table
  3661.  32h    WORD    file alignment size shift count
  3662.         0 is equivalent to 9 (default 512-byte pages)
  3663.  34h    WORD    number of resource table entries
  3664.  36h    BYTE    target operating system
  3665.         00h unknown
  3666.         01h OS/2
  3667.         02h Windows
  3668.         03h European MS-DOS 4.x
  3669.         04h Windows 386
  3670.         05h BOSS (Borland Operating System Services)
  3671.  37h    BYTE    other EXE flags
  3672.         bit 0: supports long filenames
  3673.         bit 1: 2.X protected mode
  3674.         bit 2: 2.X proportional font
  3675.         bit 3: gangload area
  3676.  38h    WORD    offset to return thunks or start of gangload area
  3677.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  3678.  3Ch    WORD    minimum code swap area size
  3679.  3Eh  2 BYTEs    expected Windows version (minor version first)
  3680. Note:    this header is documented in detail in the Windows 3.1 SDK Programmer's
  3681.       Reference, Vol 4.
  3682.  
  3683. Format of Codeview trailer (at end of executable):
  3684. Offset    Size    Description
  3685.  00h    WORD    signature 4E42h ('NB')
  3686.  02h    WORD    Microsoft debug info version number
  3687.  04h    DWORD    Codeview header offset
  3688.  
  3689. Format of new executable segment table record:
  3690.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  3691.  02h    WORD    length of image in file (0000h = 64K)
  3692.  04h    WORD    segment attributes (see below)
  3693.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  3694. Note:    the first segment table entry is entry number 1
  3695.  
  3696. Bitfields for segment attributes:
  3697.  bit 0    data segment rather than code segment
  3698.  bit 1    unused???
  3699.  bit 2    real mode
  3700.  bit 3    iterated
  3701.  bit 4    movable
  3702.  bit 5    sharable
  3703.  bit 6    preloaded rather than demand-loaded
  3704.  bit 7    execute-only (code) or read-only (data)
  3705.  bit 8    relocations (directly following code for this segment)
  3706.  bit 9    debug info present
  3707.  bits 10,11    80286 DPL bits
  3708.  bit 12        discardable
  3709.  bits 13-15    discard priority
  3710.  
  3711. Format of new executable entry table item (list):
  3712. Offset    Size    Description
  3713.  00h    BYTE    number of entry points (00h if end of entry table list)
  3714.  01h    BYTE    segment number (00h if end of entry table list)
  3715.  02h 3N BYTEs    entry records
  3716.         Offset    Size    Description
  3717.          00h    BYTE    flags
  3718.                 bit 0: exported
  3719.                 bit 1: single data
  3720.                 bits 2-7: unused???
  3721.          01h    WORD    offset within segment
  3722.  
  3723. Format of new executable relocation data (immediately follows segment image):
  3724. Offset    Size    Description
  3725.  00h    WORD    number of relocation items
  3726.  02h 8N BYTEs    relocation items
  3727.         Offset    Size    Description
  3728.          00h    BYTE    relocation type
  3729.                 00h LOBYTE
  3730.                 02h BASE
  3731.                 03h PTR
  3732.                 05h OFFS
  3733.                 0Bh PTR48
  3734.                 0Dh OFFS32
  3735.          01h    BYTE    flags
  3736.                 bit 2: additive
  3737.          02h    WORD    offset within segment
  3738.          04h    WORD    target address segment
  3739.          06h    WORD    target address offset
  3740.          
  3741. Format of new executable resource data:
  3742. Offset    Size    Description
  3743.  00h    WORD    alignment shift count for resource data
  3744.  02h  N RECORDs resources
  3745.     Format of resource record:
  3746.     Offset    Size    Description
  3747.      00h    WORD    type ID
  3748.             0000h if end of resource records
  3749.             >= 8000h if integer type
  3750.             else offset from start of resource table to type string
  3751.      02h    WORD    number of resources of this type
  3752.      04h    DWORD    reserved for runtime use
  3753.      08h  N Resources (see below)
  3754. Note:    resource type and name strings are stored immediately following the
  3755.       resource table, and are not null-terminated
  3756.  
  3757. Format of new executable resource entry:
  3758. Offset    Size    Description
  3759.  00h    WORD    offset in alignment units from start of file to contents of
  3760.         the resource data
  3761.  02h    WORD    length of resource image in bytes
  3762.  04h    WORD    flags
  3763.         bit 4: moveable
  3764.         bit 5: shareable
  3765.         bit 6: preloaded
  3766.  06h    WORD    resource ID
  3767.         >= 8000h if integer resource
  3768.         else offset from start of resource table to resource string
  3769.  08h    DWORD    reserved for runtime use
  3770. Notes:    resource type and name strings are stored immediately following the
  3771.       resource table, and are not null-terminated
  3772.     strings are counted strings, with a string of length 0 indicating the
  3773.       end of the resource table
  3774.  
  3775. Format of new executable module reference table [one bundle of entries]:
  3776. Offset    Size    Description
  3777.  00h    BYTE    number of records in this bundle (00h if end of table)
  3778.  01h    BYTE    segment indicator
  3779.         00h unused
  3780.         FFh movable segment, segment number is in entry
  3781.         else segment number of fixed segment
  3782.  02h  N RECORDs
  3783.     Format of segment record
  3784.     Offset    Size    Description
  3785.      00h    BYTE    flags
  3786.             bit 0: entry is exported
  3787.             bit 1: entry uses global (shared) data
  3788.             bits 7-3: number of parameter words
  3789.     ---fixed segment---
  3790.      01h    WORD    offset
  3791.     ---moveable segment---
  3792.      01h  2 BYTEs    INT 3F instruction (CDh 3Fh)
  3793.      03h    BYTE    segment number
  3794.      05h    WORD    offset
  3795. Note:    table entries are numbered starting from 1
  3796.  
  3797. Format of new executable resident/nonresident name table entry:
  3798. Offset    Size    Description
  3799.  00h    BYTE    length of string (00h if end of table)
  3800.  01h  N BYTEs    ASCII text of string
  3801.  N+1    WORD    ordinal number (index into entry table)
  3802. Notes:    the first string in the resident name table is the module name; the
  3803.       first entry in the nonresident name table is the module description
  3804.     the strings are case-sensitive; if the executable was linked with
  3805.       /IGNORECASE, all strings are in uppercase
  3806.  
  3807. Format of Linear Executable (enhanced mode executable) header:
  3808. Offset    Size    Description
  3809.  00h  2 BYTEs    "LE" (4Ch 45h) signature (Windows)
  3810.          "LX" (4Ch 58h) signature (OS/2)
  3811.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  3812.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  3813.  04h    DWORD    executable format level
  3814.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  3815.         01h Intel 80286 or upwardly compatible
  3816.         02h Intel 80386 or upwardly compatible            
  3817.         03h Intel 80486 or upwardly compatible            
  3818.         04h Intel Pentium (80586) or upwardly compatible
  3819.         20h Intel i860 (N10) or compatible
  3820.         21h Intel "N11" or compatible
  3821.         40h MIPS Mark I (R2000, R3000) or compatible
  3822.         41h MIPS Mark II (R6000) or compatible
  3823.         42h MIPS Mark III (R4000) or compatible
  3824.  0Ah    WORD    target operating system
  3825.         01h OS/2
  3826.         02h Windows
  3827.         03h European DOS 4.0
  3828.         04h Windows 386
  3829.  0Ch    DWORD    module version
  3830.  10h    DWORD    module type
  3831.         bit 2: initialization (only for DLLs)
  3832.             0 = global
  3833.             1 = per-process
  3834.         bit 4: no internal fixups in executable image
  3835.         bit 5: no external fixups in executable image
  3836.         bits 8,9,10:
  3837.             0 = unknown
  3838.             1 = incompatible with PM windowing \
  3839.             2 = compatible with PM windowing    > (only for
  3840.             3 = uses PM windowing API       /    programs)
  3841.         bit 13: module not loadable (only for programs)
  3842.         bits 17,16,15: module type
  3843.             000 program
  3844.             001 library (DLL)
  3845.             011 protected memory library module
  3846.             100 physical device driver
  3847.             110 virtual device driver
  3848.         bit 30: per-process library termination
  3849.             (requires valid CS:EIP, can't be set for .EXE)
  3850.  14h    DWORD    number of memory pages
  3851.  18h    Initial CS:EIP
  3852.     DWORD    object number
  3853.     DWORD    offset
  3854.  20h    Initial SS:ESP
  3855.     DWORD    object number
  3856.     DWORD    offset
  3857.  28h    DWORD    memory page size
  3858.  2Ch    DWORD    (Windows LE) bytes on last page
  3859.          (OS/2 LX) page offset shift count
  3860.  30h    DWORD    fixup section size
  3861.  34h    DWORD    fixup section checksum
  3862.  38h    DWORD    loader section size
  3863.  3Ch    DWORD    loader section checksum
  3864.  40h    DWORD    offset of object table (see below)
  3865.  44h    DWORD    object table entries
  3866.  48h    DWORD    object page map table offset
  3867.  4CH    DWORD    object iterate data map offset
  3868.  50h    DWORD    resource table offset
  3869.  54h    DWORD    resource table entries
  3870.  58h    DWORD    resident names table offset
  3871.  5Ch    DWORD    entry table offset
  3872.  60h    DWORD    module directives table offset
  3873.  64h    DWORD    Module Directives entries
  3874.  68h    DWORD    Fixup page table offset
  3875.  6Ch    DWORD    Fixup record table offset
  3876.  70h    DWORD    imported modules name table offset
  3877.  74h    DWORD    imported modules count
  3878.  78h    DWORD    imported procedures name table offset
  3879.  7Ch    DWORD    per-page checksum table offset
  3880.  80h    DWORD    data pages offset
  3881.  84h    DWORD    preload page count
  3882.  88h    DWORD    non-resident names table offset
  3883.  8Ch    DWORD    non-resident names table length
  3884.  90h    DWORD    non-resident names checksum
  3885.  94h    DWORD    automatic data object
  3886.  98h    DWORD    debug information offset
  3887.  9Ch    DWORD    debug information length
  3888.  A0h    DWORD    preload instance pages number
  3889.  A4h    DWORD    demand instance pages number
  3890.  A8h    DWORD    extra heap allocation
  3891.  ACh 20 BYTEs    reserved
  3892.  C0h    WORD    device ID (MS-Windows VxD only)
  3893.  C2h    WORD    DDK version (MS-Windows VxD only)
  3894. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  3895.  
  3896. Format of object table entry:
  3897. Offset    Size    Description
  3898.  00h    DWORD    virtual size in bytes
  3899.  04h    DWORD    relocation base address
  3900.  08h    DWORD    object flags (see below)
  3901.  0Ch    DWORD    page map index
  3902.  10h    DWORD    page map entries
  3903.  14h  4 BYTEs    reserved??? (apparently always zeros)
  3904.  
  3905. Bitfields for object flags:
  3906.  bit 0    readable
  3907.  bit 1    writable
  3908.  bit 2    executable
  3909.  bit 3    resource
  3910.  bit 4    discardable
  3911.  bit 5    shared
  3912.  bit 6    preloaded
  3913.  bit 7    invalid
  3914.  bit 8-9 type
  3915.     00 normal
  3916.     01 zero-filled
  3917.     10 resident
  3918.     11 resident and contiguous
  3919.  bit 10    resident and long-lockable
  3920.  bit 11    reserved
  3921.  bit 12    16:16 alias required
  3922.  bit 13    "BIG" (Huge: 32-bit)
  3923.  bit 14    conforming
  3924.  bit 15    "OBJECT_I/O_PRIVILEGE_LEVEL"
  3925.  bits 16-31 reserved
  3926.  
  3927. Format of object page map table entry:
  3928. Offset    Size    Description
  3929.  00h    BYTE    ??? (usually 00h)
  3930.  01h    WORD    (big-endian) index to fixup table
  3931.         0000h if no relocation info
  3932.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  3933.  
  3934. Format of resident names table entry:
  3935. Offset    Size    Description
  3936.  00h    BYTE    length of name
  3937.  01h  N BYTEs    name
  3938.  N+1  3 BYTEs    ???
  3939.  
  3940. Format of LE linear executable entry table:
  3941. Offset    Size    Description
  3942.  00h    BYTE    number of entries in table
  3943.  01h 10 BYTEs per entry
  3944.         Offset    Size    Description
  3945.          00h    BYTE    bit flags
  3946.                 bit 0: non-empty bundle
  3947.                 bit 1: 32-bit entry
  3948.          01h    WORD    object number
  3949.          03h    BYTE    entry type flags
  3950.                 bit 0: exported
  3951.                 bit 1: uses single data rather than instance
  3952.                 bit 2: reserved
  3953.                 bits 3-7: number of stack parameters
  3954.          04h    DWORD    offset of entry point
  3955.          08h  2 BYTEs    ???
  3956. Note:    empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  3957.       and do not contain the remaining nine bytes
  3958.  
  3959. Format of LX linear executable entry table [array]:
  3960. Offset    Size    Description
  3961.  00h    BYTE    number of bundles following (00h = end of entry table)
  3962.  01h    BYTE    bundle type
  3963.          00h empty
  3964.         01h 16-bit entry
  3965.         02h 286 callgate entry
  3966.         03h 32-bit entry
  3967.         04h forwarder entry
  3968.         bit 7 set if additional parameter typing information is present
  3969. ---bundle type 00h---
  3970.  no additional fields
  3971. ---bundle type 01h---
  3972.  02h    WORD    object number
  3973.  04h    BYTE    entry flags
  3974.          bit 0: exported
  3975.         bits 7-3: number of stack parameters
  3976.  05h    WORD    offset of entry point in object (shifted by page size shift)
  3977. ---bundle type 02h---
  3978.  02h    WORD    object number
  3979.  04h    BYTE    entry flags
  3980.          bit 0: exported
  3981.         bits 7-3: number of stack parameters
  3982.  05h    WORD    offset of entry point in object
  3983.  07h    WORD    reserved for callgate selector (used by loader)
  3984. ---bundle type 03h---
  3985.  02h    WORD    object number
  3986.  04h    BYTE    entry flags
  3987.          bit 0: exported
  3988.         bits 7-3: number of stack parameters
  3989.  05h    DWORD    offset of entry point in object
  3990. ---bundle type 04h---
  3991.  02h    WORD    reserved
  3992.  04h    BYTE    forwarder flags
  3993.          bit 0: import by ordinal
  3994.         bits 7-1 reserved
  3995.  05h    WORD    module ordinal
  3996.          (forwarder's index into Import Module Name table)
  3997.  07h    DWORD    procedure name offset or import ordinal number
  3998. Note:    all fields after the first two bytes are repeated N times
  3999.  
  4000. Bitfields for linear executable fixup type:
  4001.  bit 7    ordinal is BYTE rather than WORD
  4002.  bit 6    16-bit rather than 8-bit object number/module ordinal
  4003.  bit 5    addition with DWORD rather than WORD
  4004.  bit 4    relocation info has size with new two bytes at end
  4005.  bit 3    reserved (0)
  4006.  bit 2    set if add to destination, clear to replace destination
  4007.  bits 1-0    type
  4008.         00 internal fixup
  4009.         01 external fixup, imported by ordinal
  4010.         10 external fixup, imported by name
  4011.         11 internal fixup via entry table
  4012.  
  4013. Format of linear executable fixup record:
  4014. Offset    Size    Description
  4015.  00h    BYTE    type
  4016.         bits 7-4: modifier (0001 single, 0011 multiple)
  4017.         bits 3-0: type
  4018.             0000 byte offset
  4019.             0010 word segment
  4020.             0011 16-bit far pointer (DWORD)
  4021.             0101 16-bit offset
  4022.             0110 32-bit far pointer (PWORD)
  4023.             0111 32-bit offset
  4024.             1000 near call or jump, WORD/DWORD based on seg attrib
  4025.  01h    BYTE    linear executable fixup type (see above)
  4026. ---if single type---
  4027.  02h    WORD    offset within page
  4028.  04h    relocation information
  4029.     ---internal fixup---
  4030.     BYTE    object number
  4031.     ---external,ordinal---
  4032.     BYTE    one-based module number in Import Module table
  4033.     BYTE/WORD ordinal number
  4034.     WORD/DWORD value to add (only present if modifier bit 4 set)
  4035.     ---external,name---
  4036.     BYTE    one-based module number in Import Module table
  4037.     WORD    offset in Import Procedure names
  4038.     WORD/DWORD value to add (only present if modifier bit 4 set)
  4039. ---if multiple type---
  4040.  02h    BYTE    number of items
  4041.  03h    var    relocation info as for "single" type (see above)
  4042.       N WORDs    offsets of items to relocate
  4043.  
  4044. Format of Borland debugging information header (following load image):
  4045. Offset    Size    Description
  4046.  00h    WORD    signature 52FBh
  4047.  02h    WORD    version ID
  4048.  04h    DWORD    size of name pool in bytes
  4049.  08h    WORD    number of names in namem pool
  4050.  0Ah    WORD    number of type entries
  4051.  0Ch    WORD    number of structure members
  4052.  0Eh    WORD    number of symbols
  4053.  10h    WORD    number of global symbols
  4054.  12h    WORD    number of modules
  4055.  14h    WORD    number of locals (optional)
  4056.  16h    WORD    number of scopes in table
  4057.  18h    WORD    number of line-number entries
  4058.  1Ah    WORD    number of include files
  4059.  1Ch    WORD    number of segment records
  4060.  1Eh    WORD    number of segment/file correlations
  4061.  20h    DWORD    size of load image after removing uninitialized data and debug
  4062.         info
  4063.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  4064.         depends on program flags
  4065.  28h    BYTE    program flags
  4066.         bit 0: case-sensitive link
  4067.         bit 1: pascal overlay program
  4068.  29h    WORD    no longer used
  4069.  2Bh    WORD    size of data pool in bytes
  4070.  2Dh    BYTE    padding
  4071.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  4072.  30h    WORD    number of classes
  4073.  32h    WORD    number of parents
  4074.  34h    WORD    number of global classes (currently unused)
  4075.  36h    WORD    number of overloads (currently unused)
  4076.  38h    WORD    number of scope classes
  4077.  3Ah    WORD    number of module classes
  4078.  3Ch    WORD    number of coverage offsets
  4079.  3Eh    DWORD    offset relative to symbol base of name pool
  4080.  42h    WORD    number of browser information records
  4081.  44h    WORD    number of optimized symbol records
  4082.  46h    WORD    debugging flags
  4083.  48h  8 BYTEs    padding
  4084. Note:    additional information on the Borland debugging info may be found in
  4085.       Borland's Open Architecture Handbook
  4086. --------U-214B-------------------------------
  4087. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  4088.     AH = 4Bh
  4089.     DS:DX = 0000h:0000h
  4090. Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch)
  4091.     DX = DABEh (signature, DAve BEnnett)
  4092. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  4093.       Bennett
  4094. SeeAlso: AH=2Bh/CX=454Ch
  4095. --------v-214B04-----------------------------
  4096. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  4097.     AX = 4B04h
  4098. Return: CF clear if "MG" resident
  4099.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  4100. SeeAlso: AX=4243h,AX=4B21h
  4101. --------D-214B05-----------------------------
  4102. INT 21 - DOS 5+ - SET EXECUTION STATE
  4103.     AX = 4B05h
  4104.     DS:DX -> execution state structure (see below)
  4105. Return: CF clear if successful
  4106.         AX = 0000h
  4107.     CF set on error
  4108.         AX = error code (see AH=59h)
  4109. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  4110.       execution (including setting the DOS version number).     No DOS, BIOS
  4111.       or other software interrupt may be called after return from this call
  4112.       before commencement of the child process.  If DOS is running in the
  4113.       HMA, A20 is turned off on return from this call.
  4114. SeeAlso: AH=4Bh
  4115.  
  4116. Format of execution state structure:
  4117. Offset    Size    Description
  4118.  00h    WORD    reserved (00h)
  4119.  02h    WORD    type flags
  4120.         bit 0: program is an .EXE
  4121.         bit 1: program is an overlay
  4122.  04h    DWORD    pointer to ASCIZ name of program file
  4123.  08h    WORD    PSP segment of new program
  4124.  0Ah    DWORD    starting CS:IP of new program
  4125.  0Eh    DWORD    program size including PSP
  4126. --------v-214B20-----------------------------
  4127. INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
  4128.     AX = 4B20h
  4129. SeeAlso: AX=4B04h,AX=4B21h
  4130. --------v-214B21-----------------------------
  4131. INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
  4132.     AX = 4B21h
  4133. Note:    called at completion of virus installation
  4134. SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
  4135. --------v-214B25-----------------------------
  4136. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  4137.     AX = 4B25h
  4138. Return: DI = 1234h if resident
  4139. SeeAlso: AX=4B21h,AX=4B40h
  4140. --------v-214B40-----------------------------
  4141. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  4142.     AX = 4B40h
  4143. Return: AX = 5678h if resident
  4144. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  4145. --------v-214B41-----------------------------
  4146. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  4147.     AX = 4B41h
  4148.     ???
  4149. Return: ???
  4150. SeeAlso: AX=4B40h
  4151. --------v-214B4A-----------------------------
  4152. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  4153.     AX = 4B4Ah
  4154. Return: AL = 57h if resident
  4155. SeeAlso: AX=4B40h,AX=4B4Bh
  4156. --------v-214B4B-----------------------------
  4157. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  4158.     AX = 4B4Bh
  4159. Return: CF clear if resident
  4160. SeeAlso: AX=4B4Ah,AX=4B4Dh
  4161. --------v-214B4D-----------------------------
  4162. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  4163.     AX = 4B4Dh
  4164. Return: CF clear if resident
  4165. SeeAlso: AX=4B4Ah,AX=4B50h
  4166. --------v-214B50-----------------------------
  4167. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  4168.     AX = 4B50h
  4169. Return: AX = 1234h if resident
  4170. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  4171. --------v-214B53-----------------------------
  4172. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  4173.     AX = 4B53h
  4174. Return: CF clear if resident
  4175. SeeAlso: AX=4B50h,AX=4B55h
  4176. --------v-214B55-----------------------------
  4177. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  4178.     AX = 4B55h
  4179. Return: AX = 1231h if resident
  4180. SeeAlso: AX=4B53h,AX=4B59h
  4181. --------v-214B59-----------------------------
  4182. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  4183.     AX = 4B59h
  4184. Return: CF clear if resident
  4185. SeeAlso: AX=4B50h,AX=4B5Eh
  4186. --------v-214B5E-----------------------------
  4187. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  4188.     AX = 4B5Eh
  4189. Return: CF clear if resident
  4190. SeeAlso: AX=4B59h,AX=4B87h
  4191. --------v-214B60-----------------------------
  4192. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  4193.     AX = 4B60h
  4194.     ???
  4195. Return: ???
  4196. SeeAlso: AX=4B50h
  4197. --------v-214B87-----------------------------
  4198. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  4199.     AX = 4B87h
  4200. Return: AX = 6663h if resident
  4201. SeeAlso: AX=4B5Eh,AX=4B95h
  4202. --------v-214B95-----------------------------
  4203. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  4204.     AX = 4B95h
  4205. Return: AX = 1973h if resident
  4206. SeeAlso: AX=4B87h,AX=4BA7h
  4207. --------v-214BA7-----------------------------
  4208. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  4209.     AX = 4BA7h
  4210. Return: AX = B459h if resident
  4211. SeeAlso: AX=4B95h,AX=4BAAh
  4212. --------v-214BAA-----------------------------
  4213. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  4214.     AX = 4BAAh
  4215. Return: CF clear if resident
  4216. SeeAlso: AX=4BA7h,AX=4BAFh
  4217. --------v-214BAF-----------------------------
  4218. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  4219.     AX = 4BAFh
  4220. Return: AL = AFh if "Magnitogorsk" resident
  4221.     AL = FAh if "948"/"Screenplus1" resident
  4222. SeeAlso: AX=4BAAh,AX=4BDDh
  4223. --------v-214BDD-----------------------------
  4224. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  4225.     AX = 4BDDh
  4226. Return: AX = 1234h
  4227. SeeAlso: AX=4BAFh,AX=4BFEh
  4228. --------v-214BEE-----------------------------
  4229. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  4230.     AX = 4BEEh
  4231. Return: AX = 1234h if grab successful
  4232.        = 2345h if failed (INT 21 grabbed previously)
  4233. Notes:    F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
  4234.       Fridrik Skulason
  4235.     when called the first time, this function moves the INT 21 monitoring
  4236.       code from its original location in the INT 21 chain to be the first
  4237.       thing called by INT 21.  This is the mechanism used by F-NET.
  4238. SeeAlso: INT 2F/AX=4653h
  4239. --------k-214BF0-----------------------------
  4240. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  4241.     AX = 4BF0h
  4242. Return: CF clear if installed
  4243.         AX = 899Dh
  4244. Program: DIET is an executable-compression program by Teddy Matsumoto
  4245. SeeAlso: AX=37D0h,AX=4BF1h
  4246. --------k-214BF1-----------------------------
  4247. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  4248.     AX = 4BF1h
  4249. Return: ???
  4250. SeeAlso: AX=37D0h,AX=4BF0h
  4251. --------v-214BFE-----------------------------
  4252. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  4253.     AX = 4BFEh
  4254. Return: AX = 1234h if "Hitchcock" resident
  4255.     AX = ABCDh if "1193"/"Copyright" resident
  4256.     DI = 55BBh if "Dark Avenger-1028" resident
  4257. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  4258. --------v-214BFF-----------------------------
  4259. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  4260.     AX = 4BFFh
  4261. Return: BL = FFh if "USSR-707" resident
  4262.     DI = 55AAh if "Justice" resident
  4263.     CF clear if "Europe 92" resident
  4264. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  4265. --------v-214BFFSI0000-----------------------
  4266. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  4267.     AX = 4BFFh
  4268.     SI = 0000h
  4269.     DI = 0000h
  4270. Return: DI = 55AAh if installed
  4271. SeeAlso: AX=4BFFh"Justice",AX=5252h
  4272. --------D-214C-------------------------------
  4273. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  4274.     AH = 4Ch
  4275.     AL = return code
  4276. Return: never returns
  4277. Notes:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  4278.       all open files are closed and all memory belonging to the process
  4279.       is freed
  4280.     all network file locks should be removed before calling this function
  4281. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  4282. SeeAlso: INT 60/DI=0601h
  4283. --------D-214D-------------------------------
  4284. INT 21 - DOS 2+ - GET RETURN CODE
  4285.     AH = 4Dh
  4286. Return: AH = termination type
  4287.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  4288.         01h control-C abort
  4289.         02h critical error abort
  4290.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  4291.     AL = return code
  4292. Notes:    the word in which DOS stores the return code is cleared after being
  4293.       read by this function, so the return code can only be retrieved once
  4294.     this call should not be used if the child was started with AX=4B04h;
  4295.       use AH=8Ah instead
  4296.     the following sequence will close a Virtual DOS Machine under OS/2 2.0:
  4297.       MOV    AH,4Dh
  4298.       INT    21h
  4299.       HLT
  4300.       DB    02h,0FDh
  4301.       This sequence is the only way to close a specific VDM which was
  4302.       booted from floppy or a disk image.
  4303. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  4304. --------D-214E-------------------------------
  4305. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  4306.     AH = 4Eh
  4307.     AL = special flag for use by APPEND (see note below)
  4308.     CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored)
  4309.         0088h (Novell DOS 7) find first deleted file
  4310.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  4311. Return: CF clear if successful
  4312.         [DTA] = FindFirst data block (see below)
  4313.     CF set on error
  4314.         AX = error code (02h,03h,12h) (see AH=59h)
  4315. Notes:    for search attributes other than 08h, all files with at MOST the
  4316.       specified combination of hidden, system, and directory attributes
  4317.       will be returned.  Under DOS 2.x, searching for attribute 08h
  4318.       (volume label) will also return normal files, while under DOS 3+
  4319.       only the volume label (if any) will be returned.
  4320.     this call also returns successfully if given the name of a character
  4321.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  4322.       and the current date and time.  DOS 3+ returns attribute 40h and the
  4323.       current date and time.
  4324.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  4325.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  4326.       found pathname will be stored, otherwise, the actual found path
  4327.       will be prepended to the original filespec without a path.
  4328.     under LANtastic, this call may be used to obtain a list of a server's
  4329.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  4330.       resources may be obtained by searching for "\\SERVER\@*.*"
  4331.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  4332. BUGS:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  4333.       with a character device name (no wildcards) and search attributes
  4334.       which include the volume-label bit (08h) will fail unless there is
  4335.       an intervening DOS call which implicitly or explicity performs a
  4336.       directory search without the volume-label bit.  Such implicit
  4337.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  4338.       (AH=41h), and RENAME (AH=56h)
  4339.     DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  4340. SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  4341.  
  4342. Format of FindFirst data block:
  4343. Offset    Size    Description
  4344. ---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  4345.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  4346.  01h 11 BYTEs    search template
  4347.  0Ch    BYTE    search attributes
  4348. ---DOS 2.x (and some DOS 3.x???)---
  4349.  00h    BYTE    search attributes
  4350.  01h    BYTE    drive letter
  4351.  02h 11 BYTEs    search template
  4352. ---WILDUNIX.COM---
  4353.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  4354.  0Ch    BYTE    search attributes
  4355. ---DOS 2.x and most 3.x---
  4356.  0Dh    WORD    entry count within directory
  4357.  0Fh    DWORD    pointer to DTA???
  4358.  13h    WORD    cluster number of start of parent directory
  4359. ---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  4360.  0Dh    WORD    entry count within directory
  4361.  0Fh    WORD    cluster number of start of parent directory
  4362.  11h  4 BYTEs    reserved
  4363. ---all versions, documented fields---
  4364.  15h    BYTE    attribute of file found
  4365.  16h    WORD    file time
  4366.             bits 11-15: hour
  4367.             bits 5-10:    minute
  4368.             bits 0-4:    seconds/2
  4369.  18h    WORD    file date
  4370.             bits 9-15:    year-1980
  4371.             bits 5-8:    month
  4372.             bits 0-4:    day
  4373.  1Ah    DWORD    file size
  4374.  1Eh 13 BYTEs    ASCIZ filename+extension
  4375. --------f-214E-------------------------------
  4376. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  4377.     AH = 4Eh
  4378.     DS:DX = 0000h:0000h
  4379. Return:    AH = 99h if installed
  4380. Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  4381.       Hosgood and Terry Barnaby
  4382. --------D-214F-------------------------------
  4383. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  4384.     AH = 4Fh
  4385.     [DTA] = data block from previous FindFirst or FindNext call
  4386. Return: CF clear if successful
  4387.     CF set on error
  4388.         AX = error code (12h) (see AH=59h)
  4389. Note:    under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
  4390.       the next matching deleted file will be returned
  4391. BUG:    DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  4392. SeeAlso: AH=12h,AH=4Eh
  4393. --------D-2150-------------------------------
  4394. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  4395.     AH = 50h
  4396.     BX = segment of PSP for new process
  4397. Notes:    DOS uses the current PSP address to determine which processes own files
  4398.       and memory; it corresponds to process identifiers used by other OSs
  4399.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  4400.       handler without setting the Critical Error flag
  4401.     under MS-DOS 3+ and DR-DOS 3.41+, this function does not use any of
  4402.       the DOS-internal stacks and may thus be called at any time, even
  4403.       during another INT 21h call
  4404.     some Microsoft applications such as Quick C 2.51 use segments of 0000h
  4405.       and FFFFh and direct access to the SDA (see AX=5D06h) to test whether
  4406.       they are running under MS-DOS rather than a compatible OS; although
  4407.       one should only call this function with valid PSP addresses, any
  4408.       program hooking it should be prepared to handle invalid addresses
  4409.     supported by OS/2 compatibility box
  4410.     this call was undocumented prior to the release of DOS 5.0
  4411. SeeAlso: AH=26h,AH=51h,AH=62h
  4412. --------D-2151-------------------------------
  4413. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  4414.     AH = 51h
  4415. Return: BX = segment of PSP for current process
  4416. Notes:    DOS uses the current PSP address to determine which processes own files
  4417.       and memory; it corresponds to process identifiers used by other OSs
  4418.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  4419.       handler without setting the Critical Error flag
  4420.     under DOS 3+, this function does not use any of the DOS-internal stacks
  4421.       and may thus be called at any time, even during another INT 21h call
  4422.     supported by OS/2 compatibility box
  4423.     identical to the documented AH=62h
  4424.     this call was undocumented prior to the release of DOS 5.0
  4425. SeeAlso: AH=26h,AH=50h,AH=62h
  4426. --------D-2152-------------------------------
  4427. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  4428.     AH = 52h
  4429. Return: ES:BX -> DOS list of lists
  4430. Notes:    partially supported by OS/2 v1.1 compatibility box (however, most
  4431.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  4432.       pointer is FFFFh:FFFFh).
  4433.     on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
  4434. SeeAlso: INT 2F/AX=1203h
  4435.  
  4436. Format of List of Lists:
  4437. Offset    Size    Description
  4438.  -22    WORD    (DOS ???+) LRU counter for FCB caching
  4439.  -20    WORD    (DOS ???+) LRU counter for FCB opens
  4440.  -18    DWORD    (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
  4441.              FFFFh:FFFFh if not installed or not available
  4442.  -14    WORD    (DOS ???+) offset in DOS CS of code to return from INT 21 call
  4443.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  4444.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  4445.  -8    DWORD    (DOS 3+) pointer to current disk buffer
  4446.  -4    WORD    (DOS 3+) pointer in DOS code segment of unread CON input
  4447.         when CON is read via a handle, DOS reads an entire line,
  4448.           and returns the requested portion, buffering the rest
  4449.           for the next read.  0000h indicates no unread input
  4450.  -2    WORD    segment of first memory control block
  4451.  00h    DWORD    pointer to first Drive Parameter Block (see AH=32h)
  4452.  04h    DWORD    pointer to first System File Table (see below)
  4453.  08h    DWORD    pointer to active CLOCK$ device's header (most recently loaded
  4454.          driver with CLOCK bit set)
  4455.  0Ch    DWORD    pointer to active CON device's header (most recently loaded
  4456.          driver with STDIN bit set)
  4457. ---DOS 2.x---
  4458.  10h    BYTE    number of logical drives in system
  4459.  11h    WORD    maximum bytes/block of any block device
  4460.  13h    DWORD    pointer to first disk buffer (see below)
  4461.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4462.         NUL is always the first device on DOS's linked list of device 
  4463.         drivers. (see below)
  4464. ---DOS 3.0---
  4465.  10h    BYTE    number of block devices
  4466.  11h    WORD    maximum bytes/block of any block device
  4467.  13h    DWORD    pointer to first disk buffer (see below)
  4468.  17h    DWORD    pointer to array of current directory structures (see below)
  4469.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  4470.  1Ch    DWORD    pointer to STRING= workspace area
  4471.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  4472.  22h    DWORD    pointer to FCB table
  4473.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  4474.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4475.         NUL is always the first device on DOS's linked list of device 
  4476.         drivers. (see below)
  4477. ---DOS 3.1-3.3---
  4478.  10h    WORD    maximum bytes per sector of any block device
  4479.  12h    DWORD    pointer to first disk buffer in buffer chain (see below)
  4480.  16h    DWORD    pointer to array of current directory structures (see below)
  4481.  1Ah    DWORD    pointer to system FCB tables (see below)
  4482.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  4483.  20h    BYTE    number of block devices installed
  4484.  21h    BYTE    number of available drive letters (largest of 5, installed
  4485.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  4486.         current directory structure array.
  4487.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4488.         NUL is always the first device on DOS's linked list of device
  4489.         drivers. (see below)
  4490.  34h    BYTE    number of JOIN'ed drives
  4491. ---DOS 4.x---
  4492.  10h    WORD    maximum bytes per sector of any block device
  4493.  12h    DWORD    pointer to disk buffer info record (see below)
  4494.  16h    DWORD    pointer to array of current directory structures (see below)
  4495.  1Ah    DWORD    pointer to system FCB tables (see below)
  4496.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  4497.         (always 00h for DOS 5.0)
  4498.  20h    BYTE    number of block devices installed
  4499.  21h    BYTE    number of available drive letters (largest of 5, installed
  4500.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  4501.         current directory structure array.
  4502.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4503.         NUL is always the first device on DOS's linked list of device
  4504.         drivers. (see below)
  4505.  34h    BYTE    number of JOIN'ed drives
  4506.  35h    WORD    pointer within IBMDOS code segment to list of special program
  4507.         names (see below)
  4508.         (always 0000h for DOS 5.0)
  4509.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  4510.         (see below)
  4511.         may be called by any IFS driver which does not wish to
  4512.         service functions 20h or 24h-28h itself
  4513.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  4514.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  4515.  41h    WORD    number of lookahead buffers (the y in BUFFERS x,y)
  4516.  43h    BYTE    boot drive (1=A:)
  4517.  44h    BYTE    flag: 01h to use DWORD moves (80386+), 00h otherwise
  4518.  45h    WORD    extended memory size in K
  4519. ---DOS 5.0-6.0---
  4520.  10h 39 BYTEs    as for DOS 4.x (see above)
  4521.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  4522.  3Bh    WORD    (DOS=HIGH) offset in DOS CS of function to fix A20 control
  4523.          when executing special .COM format
  4524.  3Dh    WORD    PSP of most-recently EXECed program if DOS in HMA, 0000h if low
  4525.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  4526.  
  4527. Format of memory control block (see also below):
  4528. Offset    Size    Description
  4529.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  4530.  01h    WORD    PSP segment of owner or
  4531.         0000h if free
  4532.         0006h if DR-DOS XMS UMB
  4533.         0007h if DR-DOS excluded upper memory ("hole")
  4534.         0008h if belongs to DOS
  4535.         FFFAh if 386MAX UMB control block (see AX=4402h"386MAX")
  4536.         FFFDh if 386MAX locked-out memory
  4537.         FFFEh if 386MAX UMB (immediately follows its control block)
  4538.         FFFFh if 386MAX 6.01 device driver
  4539.  03h    WORD    size of memory block in paragraphs
  4540.  05h  3 BYTEs    unused by MS-DOS
  4541.          (386MAX) if locked-out block, region start/prev region end
  4542. ---DOS 2.x,3.x---
  4543.  08h  8 BYTEs    unused
  4544. ---DOS 4+ ---
  4545.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  4546.           else garbage
  4547.         null-terminated if less than 8 characters
  4548. Notes:    the next MCB is at segment (current + size + 1)
  4549.     under DOS 3.1+, the first memory block is the DOS data segment,
  4550.       containing installable drivers, buffers, etc.     Under DOS 4+ it is
  4551.       divided into subsegments, each with its own memory control block
  4552.       (see below), the first of which is at offset 0000h.
  4553.     for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
  4554.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  4555.       "SD" is system data, device drivers, etc.
  4556.     Some versions of DR-DOS use only seven characters of the program name,
  4557.       placing a NUL in the eighth byte.
  4558.  
  4559. Format of MS-DOS 5+ UMB control block:
  4560. Offset    Size    Description
  4561.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  4562.  01h    WORD    first available paragraph in UMB if control block at start
  4563.         of UMB, 000Ah if control block at end of UMB
  4564.  03h    WORD    length in paragraphs of following UMB or locked-out region
  4565.  05h  3 BYTEs    unused
  4566.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  4567.  
  4568. Format of STARLITE (General Software's Embedded DOS) memory control block:
  4569. Offset    Size    Description
  4570.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  4571.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  4572.  03h    WORD    size of memory block in paragraphs
  4573.  05h    BYTE    unused
  4574.  06h    WORD    segment address of next memory control block (0000h if last)
  4575.  08h    WORD    segment address of previous memory control block or 0000h
  4576.  0Ah  6 BYTEs    reserved
  4577.  
  4578. Format of DOS 4+ data segment subsegment control blocks:
  4579. Offset    Size    Description
  4580.  00h    BYTE    subsegment type (blocks typically appear in this order)
  4581.         "D"  device driver
  4582.         "E"  device driver appendage
  4583.         "I"  IFS (Installable File System) driver
  4584.         "F"  FILES=  control block storage area (for FILES>5)
  4585.         "X"  FCBS=   control block storage area, if present
  4586.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  4587.         "B"  BUFFERS=  storage area
  4588.         "L"  LASTDRIVE=     current directory structure array storage area
  4589.         "S"  STACKS=  code and data area, if present (see below)
  4590.         "T"  INSTALL= transient code
  4591.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  4592.  03h    WORD    size of subsegment in paragraphs
  4593.  05h  3 BYTEs    unused
  4594.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  4595.           was loaded (unused for other types)
  4596.  
  4597. Format of data at start of STACKS code segment (if present):
  4598. Offset    Size    Description
  4599.  00h    WORD    ???
  4600.  02h    WORD    number of stacks (the x in STACKS=x,y)
  4601.  04h    WORD    size of stack control block array (should be 8*x)
  4602.  06h    WORD    size of each stack (the y in STACKS=x,y)
  4603.  08h    DWORD    pointer to STACKS data segment
  4604.  0Ch    WORD    offset in STACKS data segment of stack control block array
  4605.  0Eh    WORD    offset in STACKS data segment of last element of that array
  4606.  10h    WORD    offset in STACKS data segment of the entry in that array for
  4607.         the next stack to be allocated (initially same as value in 0Eh
  4608.         and works its way down in steps of 8 to the value in 0Ch as
  4609.         hardware interrupts pre-empt each other)
  4610. Note:    the STACKS code segment data may, if present, be located as follows:
  4611.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  4612.         in the IBMBIO segment (seen at 0070:0190h)
  4613.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  4614.         segment, which may be determined by inspecting the segment
  4615.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  4616.         70h, 72-77h which have not been redirected by device drivers or
  4617.         TSRs.
  4618.     DOS 4+    Identified by sub-segment control block type "S" within the DOS
  4619.         data segment.
  4620. SeeAlso: INT B4"STACKMAN"
  4621.  
  4622. Format of array elements in STACKS data segment:
  4623. Offset    Size    Description
  4624.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  4625.         higher stack.
  4626.  01h    BYTE    not used
  4627.  02h    WORD    previous SP
  4628.  04h    WORD    previous SS
  4629.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  4630.         top of the stack is preset to point back to this control block.
  4631.  
  4632. SHARE.EXE hooks (DOS 3.1-6.00):
  4633. (offsets from first system file table--pointed at by ListOfLists+04h)
  4634. Offset    Size    Description
  4635. -3Ch    DWORD    pointer to FAR routine for ???
  4636.         Note: not called by MS-DOS 3.3, set to 0000h:0000h by
  4637.             SHARE 3.3+
  4638. -38h    DWORD    pointer to FAR routine called on opening file
  4639.         on call, internal DOS location points at filename(see AX=5D06h)
  4640.         Return: CF clear if successful
  4641.             CF set on error
  4642.                 AX = DOS error code (24h) (see AH=59h)
  4643.         Note: SHARE directly accesses DOS-internal data    to get name of
  4644.             file just opened
  4645. -34h    DWORD    pointer to FAR routine called on closing file
  4646.         ES:DI -> system file table
  4647.         Note: does something to every Record Lock Record for file
  4648. -30h    DWORD    pointer to FAR routine to close all files for given computer
  4649.         (called by AX=5D03h)
  4650. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  4651.         (called by AX=5D04h)
  4652. -28h    DWORD    pointer to FAR routine to close file by name
  4653.         (called by AX=5D02h)
  4654.         DS:SI -> DOS parameter list (see AX=5D00h)
  4655.            DPL's DS:DX -> name of file to close
  4656.         Return: CF clear if successful
  4657.             CF set on error
  4658.                 AX = DOS error code (03h) (see AH=59h)
  4659. -24h    DWORD    pointer to FAR routine to lock region of file
  4660.         call with BX = file handle
  4661.               CX:DX = starting offset
  4662.               SI:AX = size
  4663.         Return: CF set on error
  4664.                 AL = DOS error code (21h) (see AH=59h)
  4665.         Note: not called if file is marked as remote
  4666. -20h    DWORD    pointer to FAR routine to unlock region of file
  4667.         call with BX = file handle
  4668.               CX:DX = starting offset
  4669.               SI:AX = size
  4670.         Return: CF set on error
  4671.                 AL = DOS error code (21h) (see AH=59h)
  4672.         Note: not called if file is marked as remote
  4673. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  4674.         call with ES:DI -> system file table entry for file
  4675.             CX = length of region from current position in file
  4676.         Return: CF set if any portion of region locked
  4677.                 AX = 0021h
  4678. -18h    DWORD    pointer to FAR routine to get open file list entry
  4679.         (called by AX=5D05h)
  4680.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  4681.             DPL's BX = index of sharing record
  4682.             DPL's CX = index of SFT in SFT chain of sharing rec
  4683.         Return: CF set on error or not loaded
  4684.                 AX = DOS error code (12h) (see AH=59h)
  4685.             CF clear if successful
  4686.                 ES:DI -> filename
  4687.                 CX = number of locks owned by specified SFT
  4688.                 BX = network machine number
  4689.                 DX destroyed
  4690. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  4691.         call with DS:SI -> unopened FCB
  4692.               ES:DI -> system file table entry
  4693.         Return: BL = C0h???
  4694.         Note: copies following fields from SFT to FCB:
  4695.            starting cluster of file      0Bh     1Ah
  4696.            sharing record offset      33h     1Ch
  4697.            file attribute          04h     1Eh
  4698. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  4699.         call with ES:DI -> system file table entry
  4700.               DS:SI -> FCB
  4701.         Return: CF set if SFT closed or sharing record offsets
  4702.                 mismatched
  4703.             CF clear if successful
  4704.                 BX = starting cluster number from FCB
  4705. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  4706.         DS:SI -> system file table
  4707.         Return: AX = number of handle in JFT which already uses SFT
  4708.         Note: called during open/create of a file
  4709.         Note: if SFT was opened with inheritance enabled and sharing
  4710.             mode 111, does something to all other SFTs owned by
  4711.             same process which have the same file open mode and
  4712.             sharing record
  4713. -08h    DWORD    pointer to FAR routine for closing file
  4714.         Note: closes various handles referring to file most-recently
  4715.             opened
  4716. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  4717.           entries
  4718.         call with ES:DI -> system file table entry for file (see below)
  4719.               AX = subfunction (apply to each related SFT)
  4720.                 00h: update time stamp (offset 0Dh) and date
  4721.                      stamp (offset 0Fh)
  4722.                 01h: update file size (offset 11h) and starting
  4723.                      cluster (offset 0Bh).  Sets last-accessed
  4724.                      cluster fields to start of file if file
  4725.                      never accessed
  4726.                 02h: as function 01h, but last-accessed fields
  4727.                      always changed
  4728.                 03h: do both functions 00h and 02h
  4729.         Note: follows ptr at offset 2Bh in system file table entries
  4730.         Note: NOP if opened with no-inherit or via FCB
  4731. Note:    most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
  4732.       either that SS=DOS DS or SS=DS=DOS DS and directly access
  4733.       DOS-internal data
  4734.  
  4735. Format of sharing record:
  4736. Offset    Size    Description
  4737.  00h    BYTE    flag
  4738.         00h free block
  4739.         01h allocated block
  4740.         FFh end marker
  4741.  01h    WORD    size of block
  4742.  03h    BYTE    checksum of pathname (including NUL)
  4743.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  4744.  04h    WORD    offset in SHARE's DS of first Record Lock Record (see below)
  4745.  06h    DWORD    pointer to start of system file table chain for file
  4746.  0Ah    WORD    unique sequence number
  4747.  0Ch    var    ASCIZ full pathname
  4748.  
  4749. Format of Record Lock Record (SHARE.EXE):
  4750. Offset    Size    Description
  4751.  00h    WORD    offset in SHARE's DS of next lock table in list or 0000h
  4752.  02h    DWORD    offset in file of start of locked region
  4753.  06h    DWORD    offset in file of end of locked region
  4754.  0Ah    DWORD    pointer to System File Table entry for this file
  4755.  0Eh    WORD    PSP segment of lock's owner
  4756. ---DOS 5+ ---
  4757.  10h    WORD    lock type: (00h lock all, 01h lock writes only)
  4758.  
  4759. Format of DOS 2.x system file tables:
  4760. Offset    Size    Description
  4761.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4762.  04h    WORD    number of files in this table
  4763.  06h  28h bytes per file
  4764.     Offset    Size    Description
  4765.      00h    BYTE    number of file handles referring to this file
  4766.      01h    BYTE    file open mode (see AH=3Dh)
  4767.      02h    BYTE    file attribute
  4768.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  4769.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  4770.      0Fh    WORD    ???
  4771.      11h    WORD    ???
  4772.      13h    DWORD    file size???
  4773.      17h    WORD    file date in packed format (see AX=5700h)
  4774.      19h    WORD    file time in packed format (see AX=5700h)
  4775.      1Bh    BYTE    device attribute (see AX=4400h)
  4776.     ---character device---
  4777.      1Ch    DWORD    pointer to device driver
  4778.     ---block device---
  4779.      1Ch    WORD    starting cluster of file
  4780.      1Eh    WORD    relative cluster in file of last cluster accessed
  4781.     ------
  4782.      20h    WORD    absolute cluster number of current cluster
  4783.      22h    WORD    ???
  4784.      24h    DWORD    current file position???
  4785.  
  4786. Format of DOS 3.0 system file tables and FCB tables:
  4787. Offset    Size    Description
  4788.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4789.  04h    WORD    number of files in this table
  4790.  06h  38h bytes per file
  4791.     Offset    Size    Description
  4792.      00h-1Eh as for DOS 3.1+ (see below)
  4793.      1Fh    WORD    byte offset of directory entry within sector
  4794.      21h 11 BYTES    filename in FCB format (no path/period, blank-padded)
  4795.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4796.      30h    WORD    (SHARE.EXE) network machine number which opened file
  4797.              (Windows Enhanced mode DOSMGR uses the virtual machine
  4798.             ID as the machine number; see INT 2F/AX=1683h)
  4799.      32h    WORD    PSP segment of file's owner (first three entries for
  4800.             AUX/CON/PRN contain segment of IO.SYS startup code)
  4801.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  4802.      36h    WORD    ??? apparently always 0000h
  4803.  
  4804. Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables:
  4805. Offset    Size    Description
  4806.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4807.  04h    WORD    number of files in this table
  4808.  06h  35h bytes per file
  4809.     Offset    Size    Description
  4810.      00h    WORD    number of file handles referring to this file
  4811.      02h    WORD    file open mode (see AH=3Dh)
  4812.             bit 15 set if this file opened via FCB
  4813.      04h    BYTE    file attribute (see AX=4301h)
  4814.      05h    WORD    device info word (see AX=4400h)
  4815.             bit 15 set if remote file
  4816.             bit 14 set means do not set file date/time on closing
  4817.             bit 12 set means don't inherit on EXEC
  4818.             bits 5-0 drive number for disk files
  4819.      07h    DWORD    pointer to device driver header if character device
  4820.             else pointer to DOS Drive Parameter Block (see AH=32h)
  4821.      0Bh    WORD    starting cluster of file
  4822.      0Dh    WORD    file time in packed format (see AX=5700h)
  4823.              not used for character devices in DR-DOS
  4824.      0Fh    WORD    file date in packed format (see AX=5700h)
  4825.              not used for character devices in DR-DOS
  4826.      11h    DWORD    file size
  4827.     ---system file table---
  4828.      15h    DWORD    current offset in file (may be larger than size of
  4829.             file; INT 21/AH=42h does not check new position)
  4830.     ---FCB table---
  4831.      15h    WORD    counter for last I/O to FCB
  4832.      17h    WORD    counter for last open of FCB
  4833.             (these are separate to determine the times of the
  4834.             latest I/O and open)
  4835.     ---
  4836.      19h    WORD    relative cluster within file of last cluster accessed
  4837.      1Bh    WORD    absolute cluster number of last cluster accessed
  4838.             0000h if file never read or written???
  4839.      1Dh    WORD    number of sector containing directory entry
  4840.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  4841.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  4842.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4843.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  4844.              (Windows Enhanced mode DOSMGR uses the virtual machine
  4845.             ID as the machine number; see INT 2F/AX=1683h)
  4846.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  4847.             entries for AUX/CON/PRN contain segment of IO.SYS
  4848.             startup code)
  4849.      33h    WORD    offset within SHARE.EXE code segment of 
  4850.             sharing record (see above)  0000h = none
  4851.  
  4852. Format of DOS 4.0-6.0 system file tables and FCB tables:
  4853. Offset    Size    Description
  4854.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4855.  04h    WORD    number of files in this table
  4856.  06h  3Bh bytes per file
  4857.     Offset    Size    Description
  4858.      00h    WORD    number of file handles referring to this file
  4859.              FFFFh if in use but not referenced
  4860.      02h    WORD    file open mode (see AH=3Dh)
  4861.             bit 15 set if this file opened via FCB
  4862.      04h    BYTE    file attribute (see AX=4301h)
  4863.      05h    WORD    device info word (see also AX=4400h)
  4864.             bit 15 set if remote file
  4865.             bit 14 set means do not set file date/time on closing
  4866.             bit 13 set if named pipe
  4867.             bit 12 set if no inherit
  4868.             bit 11 set if network spooler
  4869.             bit 7  set if device, clear if file (only if local)
  4870.             bits 6-0 as for AX=4400h
  4871.      07h    DWORD    pointer to device driver header if character device
  4872.             else pointer to DOS Drive Parameter Block (see AH=32h)
  4873.             or REDIR data
  4874.      0Bh    WORD    starting cluster of file (local files only)
  4875.      0Dh    WORD    file time in packed format (see AX=5700h)
  4876.      0Fh    WORD    file date in packed format (see AX=5700h)
  4877.      11h    DWORD    file size
  4878.      15h    DWORD    current offset in file (SFT)
  4879.              LRU counters (FCB table, two WORDs)
  4880.     ---local file---
  4881.      19h    WORD    relative cluster within file of last cluster accessed
  4882.      1Bh    DWORD    number of sector containing directory entry
  4883.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  4884.     ---network redirector---
  4885.      19h    DWORD    pointer to REDIRIFS record
  4886.      1Dh  3 BYTEs    ???
  4887.     ------
  4888.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  4889.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4890.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  4891.              (Windows Enhanced mode DOSMGR uses the virtual machine
  4892.             ID as the machine number; see INT 2F/AX=1683h)
  4893.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  4894.             entries for AUX/CON/PRN contain segment of IO.SYS
  4895.             startup code)
  4896.      33h    WORD    offset within SHARE.EXE code segment of 
  4897.             sharing record (see above)  0000h = none
  4898.      35h    WORD    (local) absolute cluster number of last clustr accessed
  4899.             (redirector) ???
  4900.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  4901.  
  4902. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  4903. Offset    Size    Description
  4904.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
  4905.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  4906.         bit 15: uses network redirector     \ invalid if 00, installable
  4907.         bit 14: physical drive         / file system if 11
  4908.         bit 13: JOIN'ed      \ path above is true path that would be
  4909.         bit 12: SUBST'ed  / needed if not under SUBST or JOIN
  4910.         bit  7: remote drive hidden from redirector's assign-list and
  4911.                    exempt from network connection make/break commands;
  4912.                    set for CD-ROM drives
  4913.  45h    DWORD    pointer to Drive Parameter Block for drive (see AH=32h)
  4914. ---local drives---
  4915.  49h    WORD    starting cluster of current directory
  4916.         0000h = root, FFFFh = never accessed
  4917.  4Bh    WORD    ??? seems to be FFFFh always
  4918.  4Dh    WORD    ??? seems to be FFFFh always
  4919. ---network drives---
  4920.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  4921.          (DOS 4 only) available for use by IFS driver
  4922.  4Dh    WORD    stored user data from INT 21/AX=5F03h
  4923. ------
  4924.  4Fh    WORD    offset in current directory path of backslash corresponding to
  4925.           root directory for drive
  4926.         this value specifies how many characters to hide from the
  4927.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  4928.           drive letter and colon, SUBST, JOIN, and networks change it
  4929.           so that only the appropriate portion of the true path is
  4930.           visible to the user
  4931. ---DOS 4+ ---
  4932.  51h    BYTE    (DOS 4 only, remote drives) device type
  4933.          04h network drive
  4934.  52h    DWORD    pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
  4935.          this drive, 00000000h if native DOS
  4936.  56h    WORD    available for use by IFS driver
  4937. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  4938.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  4939.     normally, only one of bits 13&12 may be set together with bit 14, but
  4940.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  4941.       0001 SUBST, 0101 ASSIGN (see below)
  4942.  
  4943. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  4944. Offset    Size    Description
  4945.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  4946.  43h    WORD    drive attributes
  4947.         1000h SUBSTed drive
  4948.         3000h??? JOINed drive
  4949.         4000h physical drive
  4950.         5000h ASSIGNed drive
  4951.         7000h JOINed drive
  4952.         8000h network drive
  4953.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  4954.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  4955.  47h    WORD    cluster number of start of parent directory (0000h = root)
  4956.  49h    WORD    entry number of current directory in parent directory
  4957.  4Bh    WORD    cluster number of start of current directory
  4958.  4Dh    WORD    used for media change detection (details not available)
  4959.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  4960.         0000h if physical root directory
  4961.  
  4962. Format of device driver header:
  4963. Offset    Size    Description
  4964.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  4965.  04h    WORD    device attributes
  4966.         Character device:
  4967.            bit 15 set (indicates character device)
  4968.            bit 14 IOCTL supported (see AH=44h)
  4969.            bit 13 (DOS 3+) output until busy supported
  4970.            bit 12 reserved
  4971.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  4972.            bits 10-8 reserved
  4973.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  4974.                 (see AX=4410h,AX=4411h)
  4975.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  4976.                 (see AX=440Ch,AX=440Dh)
  4977.            bit 5  reserved
  4978.            bit 4  device is special (use INT 29 "fast console output")
  4979.            bit 3  device is CLOCK$ (all reads/writes use transfer
  4980.                 record described below)
  4981.            bit 2  device is NUL
  4982.            bit 1  device is standard output
  4983.            bit 0  device is standard input
  4984.         Block device:
  4985.            bit 15 clear (indicates block device)
  4986.            bit 14 IOCTL supported
  4987.            bit 13 non-IBM format
  4988.            bit 12 reserved
  4989.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  4990.            bit 10 reserved
  4991.            bit 9  direct I/O not allowed???
  4992.               (set by DOS 3.3 DRIVER.SYS for "new" drives)
  4993.            bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  4994.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  4995.                 (see AX=4410h,AX=4411h)
  4996.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  4997.                 implies support for commands 17h and 18h
  4998.                 (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  4999.            bits 5-2 reserved
  5000.            bit 1   driver supports 32-bit sector addressing (DOS 3.31+)
  5001.            bit 0   reserved
  5002.         Note: for European MS-DOS 4.0, bit 11 also indicates that bits
  5003.             8-6 contain a version code (000 = DOS 3.0,3.1;
  5004.             001 = DOS 3.2, 010 = European DOS 4.0)
  5005.  06h    WORD    device strategy entry point
  5006.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  5007.  08h    WORD    device interrupt entry point
  5008. ---character device---
  5009.  0Ah  8 BYTEs    blank-padded character device name
  5010. ---block device---
  5011.  0Ah    BYTE    number of subunits (drives) supported by driver
  5012.  0Bh  7 BYTEs    unused
  5013. ---
  5014.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  5015.          appears to be another device chain
  5016.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  5017.  15h    BYTE    (CD-ROM driver) number of units
  5018.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version 
  5019.             (currently '00')
  5020.  
  5021. Format of CLOCK$ transfer record:
  5022. Offset    Size    Description
  5023.  00h    WORD    number of days since 1-Jan-1980
  5024.  02h    BYTE    minutes
  5025.  03h    BYTE    hours
  5026.  04h    BYTE    hundredths of second
  5027.  05h    BYTE    seconds
  5028.  
  5029. Format of DOS 2.x disk buffer:
  5030. Offset    Size    Description
  5031.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5032.         least-recently used buffer is first in chain
  5033.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  5034.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  5035.  08h    WORD    logical sector number
  5036.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  5037.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  5038.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5039.  10h        buffered data
  5040.  
  5041. Format of DOS 3.x disk buffer:
  5042. Offset    Size    Description
  5043.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5044.         least-recently used buffer is first in chain
  5045.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5046.  05h    BYTE    buffer flags
  5047.         bit 7: ???
  5048.         bit 6: buffer dirty
  5049.         bit 5: buffer has been referenced
  5050.         bit 4: ???
  5051.         bit 3: sector in data area
  5052.         bit 2: sector in a directory, either root or subdirectory
  5053.         bit 1: sector in FAT
  5054.         bit 0: boot sector??? (guess)
  5055.  06h    WORD    logical sector number
  5056.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  5057.  09h    BYTE    sector offset between copies if multiple copies to be written
  5058.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5059.  0Eh    WORD    unused??? (almost always 0)
  5060.  10h        buffered data
  5061.  
  5062. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  5063. Offset    Size    Description
  5064.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5065.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5066.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5067.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5068.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  5069.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  5070.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  5071.  11h    WORD    ??? seems always to be 0001h
  5072.  13h    WORD    segment of EMS physical page frame
  5073.  15h    WORD    ??? seems always to be zero
  5074.  17h  4 WORDs    EMS partial page mapping information???
  5075.  
  5076. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  5077. Offset    Size    Description
  5078.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5079.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5080.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5081.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5082.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  5083.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  5084.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  5085.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  5086.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  5087.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  5088.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  5089.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  5090.           into EMS
  5091.  18h    WORD    EMS handle for buffers, zero if not in EMS
  5092.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  5093.  1Ch    WORD    ??? appears always to be 0001h
  5094.  1Eh    WORD    segment of EMS physical page frame
  5095.  20h    WORD    ??? appears always to be zero
  5096.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  5097.  
  5098. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  5099. Offset    Size    Description
  5100.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  5101.         in EMS
  5102.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  5103.         this chain are in the same segment.
  5104.  06h    BYTE    number of dirty buffers on this chain
  5105.  07h    BYTE    reserved (00h)
  5106. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  5107.       address modulo NDBCH,     0 <= N <= NDBCH-1
  5108.     each chain resides completely within one EMS page
  5109.     this structure is in main memory even if buffers are in EMS
  5110.  
  5111. Format of DOS 4.0-6.0 disk buffer:
  5112. Offset    Size    Description
  5113.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  5114.  02h    WORD    backward ptr, offset only
  5115.  04h    BYTE    drive (0=A,1=B, etc) if bit 7 clear
  5116.          SFT index if bit 7 set
  5117.         FFh if not in use
  5118.  05h    BYTE    buffer flags
  5119.         bit 7: remote buffer
  5120.         bit 6: buffer dirty
  5121.         bit 5: buffer has been referenced (reserved in DOS 5+)
  5122.         bit 4: search data buffer (only valid if remote buffer)
  5123.         bit 3: sector in data area
  5124.         bit 2: sector in a directory, either root or subdirectory
  5125.         bit 1: sector in FAT
  5126.         bit 0: reserved
  5127.  06h    DWORD    logical sector number (local buffers only)
  5128.  0Ah    BYTE    number of copies to write
  5129.         for FAT sectors, same as number of FATs
  5130.         for data and directory sectors, usually 1
  5131.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  5132.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5133.  11h    WORD    size of data in buffer if remote buffer (see flags above)
  5134.  13h    BYTE    reserved (padding)
  5135.  14h        buffered data
  5136. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  5137.       (computed as the sum of high and low words of the logical sector
  5138.       number divided by the number of disk buffer chains) are on the same
  5139.       doubly-linked circular chain; for DOS 5+, only a single circular
  5140.       chain exists.
  5141.     the links consist of offset addresses only, the segment being the same
  5142.       for all buffers in the chain.
  5143.  
  5144. Format of DOS 5.0-6.0 disk buffer info:
  5145. Offset    Size    Description
  5146.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  5147.         (see above)
  5148.  04h    WORD    number of dirty disk buffers
  5149.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5150.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5151.  0Ch    BYTE    buffer location
  5152.         00h base memory, no workspace buffer
  5153.         01h HMA, workspace buffer in base memory
  5154.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  5155.  11h  3 BYTEs    unused
  5156.  14h    WORD    ???
  5157.  16h    BYTE    flag: INT 24 fail while making an I/O status call
  5158.  17h    BYTE    temp storage for user memory allocation strategy during EXEC
  5159.  18h    BYTE    counter: number of INT 21 calls for which A20 is off
  5160.  19h    BYTE    bit flags
  5161.          bit 0: ???
  5162.         bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
  5163.             WINA20.SYS when MS Windows 3.0 starts)
  5164.         bit 2: in EXEC state (INT 21/AX=4B05h)
  5165.  1Ah    WORD    offset of unpack code start (used only during INT 21/AX=4B05h)
  5166.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  5167.  1Dh    WORD    minimum paragraphs of memory required by program being EXECed
  5168.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  5169.         memory chain in base 640K only (first UMB MCB usually at 9FFFh,
  5170.         locking out video memory with a DOS-owned memory block)
  5171.  21h    WORD    paragraph from which to start scanning during memory allocation
  5172.  
  5173. Format of IFS driver list:
  5174. Offset    Size    Description
  5175.  00h    DWORD    pointer to next driver header
  5176.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  5177.  0Ch  4 BYTEs    ???
  5178.  10h    DWORD    pointer to IFS utility function entry point (see below)
  5179.         call with ES:BX -> IFS request (see below)
  5180.  14h    WORD    offset in header's segment of driver entry point
  5181.     ???
  5182.  
  5183. Call IFS utility function entry point with:
  5184.     AH = 20h miscellaneous functions
  5185.         AL = 00h get date
  5186.         Return: CX = year
  5187.             DH = month
  5188.             DL = day
  5189.         AL = 01h get process ID and computer ID
  5190.         Return: BX = current PSP segment
  5191.             DX = active network machine number
  5192.         AL = 05h get file system info
  5193.         ES:DI -> 16-byte info buffer
  5194.         Return: buffer filled
  5195.             Offset    Size    Description
  5196.              00h  2 BYTEs    unused
  5197.              02h    WORD    number of SFTs (actually counts only
  5198.                     the first two file table arrays)
  5199.              04h    WORD    number of FCB table entries
  5200.              06h    WORD    number of proctected FCBs
  5201.              08h  6 BYTEs    unused
  5202.              0Eh    WORD    largest sector size supported
  5203.         AL = 06h get machine name
  5204.         ES:DI -> 18-byte buffer for name
  5205.         Return: buffer filled with name starting at offset 02h
  5206.         AL = 08h get sharing retry count
  5207.         Return: BX = sharing retry count
  5208.         AL = other
  5209.         Return: CF set
  5210.     AH = 21h get redirection state
  5211.         BH = type (03h disk, 04h printer)
  5212.         Return: BH = state (00h off, 01h on)
  5213.     AH = 22h ??? some sort of time calculation
  5214.         AL = 00h ???
  5215.             nonzero ???
  5216.     AH = 23h ??? some sort of time calculation
  5217.     AH = 24h compare filenames
  5218.         DS:SI -> first ASCIZ filename
  5219.         ES:DI -> second ASCIZ filename
  5220.         Return: ZF set if files are same ignoring case and / vs \
  5221.     AH = 25h normalize filename
  5222.         DS:SI -> ASCIZ filename
  5223.         ES:DI -> buffer for result
  5224.         Return: filename uppercased, forward slashes changed to backslashes
  5225.     AH = 26h get DOS stack
  5226.         Return: DS:SI -> top of stack
  5227.             CX = size of stack in bytes
  5228.     AH = 27h increment InDOS flag
  5229.     AH = 28h decrement InDOS flag
  5230. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  5231.       pass them on to the default handler pointed at by [LoL+37h]
  5232.  
  5233. Format of IFS request block:
  5234. Offset    Size    Description
  5235.  00h    WORD    total size in bytes of request
  5236.  02h    BYTE    class of request
  5237.         02h ???
  5238.         03h redirection
  5239.         04h ???
  5240.         05h file access
  5241.         06h convert error code to string
  5242.         07h ???
  5243.  03h    WORD    returned DOS error code
  5244.  05h    BYTE    IFS driver exit status
  5245.         00h success
  5246.         01h ???
  5247.         02h ???
  5248.         03h ???
  5249.         04h ???
  5250.         FFh internal failure
  5251.  06h 16 BYTEs    ???
  5252. ---request class 02h---
  5253.  16h    BYTE    function code
  5254.         04h ???
  5255.  17h    BYTE    unused???
  5256.  18h    DWORD    pointer to ???
  5257.  1Ch    DWORD    pointer to ???
  5258.  20h  2 BYTEs    ???
  5259. ---request class 03h---
  5260.  16h    BYTE    function code
  5261.  17h    BYTE    ???
  5262.  18h    DWORD    pointer to ???
  5263.  1Ch    DWORD    pointer to ???
  5264.  22h    WORD    returned ???
  5265.  24h    WORD    returned ???
  5266.  26h    WORD    returned ???
  5267.  28h    BYTE    returned ???
  5268.  29h    BYTE    unused???
  5269. ---request class 04h---
  5270.  16h    DWORD    pointer to ???
  5271.  1Ah    DWORD    pointer to ???
  5272. ---request class 05h---
  5273.  16h    BYTE    function code
  5274.         01h flush disk buffers
  5275.         02h get disk space
  5276.         03h MKDIR
  5277.         04h RMDIR
  5278.         05h CHDIR
  5279.         06h delete file
  5280.         07h rename file
  5281.         08h search directory
  5282.         09h file open/create
  5283.         0Ah LSEEK
  5284.         0Bh read from file
  5285.         0Ch write to file
  5286.         0Dh lock region of file
  5287.         0Eh commit/close file
  5288.         0Fh get/set file attributes
  5289.         10h printer control
  5290.         11h ???
  5291.         12h process termination
  5292.         13h ???
  5293.     ---class 05h function 01h---
  5294.      17h  7    BYTEs    ???
  5295.      1Eh    DWORD    pointer to ???
  5296.      22h  4 BYTEs    ???
  5297.      26h    BYTE    ???
  5298.      27h    BYTE    ???
  5299.     ---class 05h function 02h---
  5300.      17h  7 BYTEs    ???
  5301.      1Eh    DWORD    pointer to ???
  5302.      22h  4 BYTEs    ???
  5303.      26h    WORD    returned total clusters
  5304.      28h    WORD    returned sectors per cluster
  5305.      2Ah    WORD    returned bytes per sector
  5306.      2Ch    WORD    returned available clusters
  5307.      2Eh    BYTE    returned ???
  5308.      2Fh    BYTE    ???
  5309.     ---class 05h functions 03h,04h,05h---
  5310.      17h  7 BYTEs    ???
  5311.      1Eh    DWORD    pointer to ???
  5312.      22h  4 BYTEs    ???
  5313.      26h    DWORD    pointer to directory name
  5314.     ---class 05h function 06h---
  5315.      17h  7 BYTEs    ???
  5316.      1Eh    DWORD    pointer to ???
  5317.      22h  4 BYTEs    ???
  5318.      26h    WORD    attribute mask
  5319.      28h    DWORD    pointer to filename
  5320.     ---class 05h function 07h---
  5321.      17h  7 BYTEs    ???
  5322.      1Eh    DWORD    pointer to ???
  5323.      22h  4 BYTEs    ???
  5324.      26h    WORD    attribute mask
  5325.      28h    DWORD    pointer to source filespec
  5326.      2Ch    DWORD    pointer to destination filespec
  5327.     ---class 05h function 08h---
  5328.      17h  7 BYTEs    ???
  5329.      1Eh    DWORD    pointer to ???
  5330.      22h  4 BYTEs    ???
  5331.      26h    BYTE    00h FINDFIRST
  5332.             01h FINDNEXT
  5333.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  5334.      2Ch    WORD    search attribute if FINDFIRST
  5335.      2Eh    DWORD    pointer to filespec if FINDFIRST
  5336.     ---class 05h function 09h---
  5337.      17h  7 BYTEs    ???
  5338.      1Eh    DWORD    pointer to ???
  5339.      22h    DWORD    pointer to IFS open file structure (see below)
  5340.      26h    WORD    ???  \ together, specify open vs. create, whether or
  5341.      28h    WORD    ???  / not to truncate
  5342.      2Ah  4 BYTEs    ???
  5343.      2Eh    DWORD    pointer to filename
  5344.      32h  4 BYTEs    ???
  5345.      36h    WORD    file attributes on call
  5346.             returned ???
  5347.      38h    WORD    returned ???
  5348.     ---class 05h function 0Ah---
  5349.      17h  7 BYTEs    ???
  5350.      1Eh    DWORD    pointer to ???
  5351.      22h    DWORD    pointer to IFS open file structure (see below)
  5352.      26h    BYTE    seek type (02h = from end)
  5353.      28h    DWORD    offset on call
  5354.             returned new absolute position
  5355.     ---class 05h functions 0Bh,0Ch---
  5356.      17h  7 BYTEs    ???
  5357.      1Eh    DWORD    pointer to ???
  5358.      22h    DWORD    pointer to IFS open file structure (see below)
  5359.      28h    WORD    number of bytes to transfer
  5360.             returned bytes actually transferred
  5361.      2Ah    DWORD    transfer address
  5362.     ---class 05h function 0Dh---
  5363.      17h  7 BYTEs    ???
  5364.      1Eh    DWORD    pointer to ???
  5365.      22h    DWORD    pointer to IFS open file structure (see below)
  5366.      26h    BYTE    file handle???
  5367.      27h    BYTE    unused???
  5368.      28h    WORD    ???
  5369.      2Ah    WORD    ???
  5370.      2Ch    WORD    ???
  5371.      2Eh    WORD    ???
  5372.     ---class 05h function 0Eh---
  5373.      17h  7 BYTEs    ???
  5374.      1Eh    DWORD    pointer to ???
  5375.      22h    DWORD    pointer to IFS open file structure (see below)
  5376.      26h    BYTE    00h commit file
  5377.             01h close file
  5378.      27h    BYTE    unused???
  5379.     ---class 05h function 0Fh---
  5380.      17h  7 BYTEs    ???
  5381.      1Eh    DWORD    pointer to ???
  5382.      22h  4 BYTEs    ???
  5383.      26h    BYTE    02h GET attributes
  5384.             03h PUT attributes
  5385.      27h    BYTE    unused???
  5386.      28h 12 BYTEs    ???
  5387.      34h    WORD    search attributes???
  5388.      36h    DWORD    pointer to filename
  5389.      3Ah    WORD    (GET) returned ??? 
  5390.      3Ch    WORD    (GET) returned ???
  5391.      3Eh    WORD    (GET) returned ???
  5392.      40h    WORD    (GET) returned ???
  5393.      42h    WORD    (PUT) new attributes
  5394.             (GET) returned attributes
  5395.     ---class 05h function 10h---
  5396.      17h  7 BYTEs    ???
  5397.      1Eh    DWORD    pointer to ???
  5398.      22h    DWORD    pointer to IFS open file structure (see below)
  5399.      26h    WORD    ???
  5400.      28h    DWORD    pointer to ???
  5401.      2Ch    WORD    ???
  5402.      2Eh    BYTE    ???
  5403.      2Fh    BYTE    subfunction
  5404.             01h get printer setup
  5405.             03h ???
  5406.             04h ???
  5407.             05h ???
  5408.             06h ???
  5409.             07h ???
  5410.             21h set printer setup
  5411.     ---class 05h function 11h---
  5412.      17h  7 BYTEs    ???
  5413.      1Eh    DWORD    pointer to ???
  5414.      22h    DWORD    pointer to IFS open file structure (see below)
  5415.      26h    BYTE    subfunction
  5416.      27h    BYTE    unused???
  5417.      28h    WORD    ???
  5418.      2Ah    WORD    ???
  5419.      2Ch    WORD    ???
  5420.      2Eh    BYTE    ???
  5421.      2Fh    BYTE    ???
  5422.     ---class 05h function 12h---
  5423.      17h 15 BYTEs    unused???
  5424.      26h    WORD    PSP segment
  5425.      28h    BYTE    type of process termination
  5426.      29h    BYTE    unused???
  5427.     ---class 05h function 13h---
  5428.      17h 15 BYTEs    unused???
  5429.      26h    WORD    PSP segment
  5430. ---request class 06h---
  5431.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  5432.  1Ah    BYTE    returned ???
  5433.  1Bh    BYTE    unused
  5434. ---request class 07h---
  5435.  16h    DWORD    pointer to IFS open file structure (see below)
  5436.  1Ah    BYTE    ???
  5437.  1Bh    BYTE    unused???
  5438.  
  5439. Format of IFS open file structure:
  5440. Offset    Size    Description
  5441.  00h    WORD    ???
  5442.  02h    WORD    device info word
  5443.  04h    WORD    file open mode
  5444.  06h    WORD    ???
  5445.  08h    WORD    file attributes
  5446.  0Ah    WORD    owner's network machine number
  5447.  0Ch    WORD    owner's PSP segment
  5448.  0Eh    DWORD    file size
  5449.  12h    DWORD    current offset in file
  5450.  16h    WORD    file time
  5451.  18h    WORD    file date
  5452.  1Ah 11 BYTEs    filename in FCB format
  5453.  25h    WORD    ???
  5454.  27h    WORD    hash value of SFT address
  5455.         (low word of linear address + segment&F000h)
  5456.  29h  3 WORDs    network info from SFT
  5457.  2Fh    WORD    ???
  5458.  
  5459. Format of one item in DOS 4+ list of special program names:
  5460. Offset    Size    Description
  5461.  00h    BYTE    length of name (00h = end of list)
  5462.  01h  N BYTEs    name in format name.ext
  5463.  N    2 BYTEs    DOS version to return for program (major,minor)
  5464.         (see AH=30h,INT 2F/AX=122Fh)
  5465. ---DOS 4 only---
  5466.  N+2    BYTE    number of times to return fake version number (FFh = always)
  5467. Note:    if the name of the executable for the program making the DOS "get
  5468.       version" call matches one of the names in this list, DOS returns the
  5469.       specified version rather than the true version number
  5470. --------v-215252-----------------------------
  5471. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  5472.     AX = 5252h
  5473. Return: BX = FFEEh if resident
  5474. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  5475. --------D-2153-------------------------------
  5476. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  5477.     AH = 53h
  5478.     DS:SI -> BIOS Parameter Block (see below)
  5479.     ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
  5480. Return: ES:BP buffer filled
  5481. Note:    for DOS 3+, the cluster at which to start searching is set to 0000h
  5482.       and the number of free clusters is set to FFFFh (unknown)
  5483.  
  5484. Format of BIOS Parameter Block:
  5485. Offset    Size    Description
  5486.  00h    WORD    number of bytes per sector
  5487.  02h    BYTE    number of sectors per cluster
  5488.  03h    WORD    number of reserved sectors at start of disk
  5489.  05h    BYTE    number of FATs
  5490.  06h    WORD    number of entries in root directory
  5491.  08h    WORD    total number of sectors
  5492.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  5493.           15h to actual number of sectors
  5494.  0Ah    BYTE    media ID byte
  5495.  0Bh    WORD    number of sectors per FAT
  5496. ---DOS 3+---
  5497.  0Dh    WORD    number of sectors per track
  5498.  0Fh    WORD    number of heads
  5499.  11h    DWORD    number of hidden sectors
  5500.  15h 11 BYTEs    reserved    
  5501. ---DOS 4+ ---
  5502.  15h    DWORD    total number of sectors if word at 08h contains zero
  5503.  19h  6 BYTEs    ???
  5504.  1Fh    WORD    number of cylinders
  5505.  21h    BYTE    device type
  5506.  22h    WORD    device attributes (removable or not, etc)
  5507. ---DR-DOS 5+ ---
  5508.  15h    DWORD    total number of sectors if word at 08h contains zero
  5509.  19h  6 BYTEs    reserved
  5510. ---European MS-DOS 4.00---
  5511.  15h    DWORD    total number of sectors if word at 08h contains zero
  5512.         (however, this DOS does not actually implement >32M partitions)
  5513. --------D-2154-------------------------------
  5514. INT 21 - DOS 2+ - GET VERIFY FLAG
  5515.     AH = 54h
  5516. Return: AL = verify flag
  5517.         00h off
  5518.         01h on (all disk writes verified after writing)
  5519. SeeAlso: AH=2Eh
  5520. --------D-2155-------------------------------
  5521. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  5522.     AH = 55h
  5523.     DX = segment at which to create new PSP
  5524.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  5525. Return: CF clear if successful
  5526.  
  5527. Notes:    creates a "child" PSP rather than making an exact copy of the current
  5528.       PSP; the new PSP's parent pointer is set to the current PSP and the
  5529.       reference count for each inherited file is incremented
  5530.     (DOS 2+) sets current PSP to DX
  5531.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  5532. SeeAlso: AH=26h,AH=50h
  5533. --------D-2156-------------------------------
  5534. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  5535.     AH = 56h
  5536.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  5537.     ES:DI -> ASCIZ new filename (no wildcards)
  5538.     CL = attribute mask (server call only, see below)
  5539. Return: CF clear if successful
  5540.     CF set on error
  5541.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  5542. Notes:    allows move between directories on same logical volume
  5543.     does not set the archive attribute (see AX=4300h), which results in
  5544.       incremental backups not backing up the file under its new name
  5545.     open files should not be renamed
  5546.     (DOS 3+) allows renaming of directories
  5547.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  5548.       error 12h (no more files) is returned on success, and both source and
  5549.       destination specs must be canonical (as returned by AH=60h).
  5550.       Wildcards in the destination are replaced by the corresponding char
  5551.       of each source file being renamed.  Under DOS 3.x, the call will fail
  5552.       if the destination wildcard is *.* or equivalent; under DR-DOS 5.0,
  5553.       the call will fail if any wildcards are used.  When invoked via
  5554.       AX=5D00h, only those files matching the attribute mask in CL are
  5555.       renamed.
  5556.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  5557.       and the new-name pointer is in ES:EDI (DS must equal ES)
  5558. BUG:    under DR-DOS 3.41, this function will generate a new directory entry
  5559.       with the new name (including any wildcards) which can only be removed
  5560.       with a sector editor when invoked via AX=5D00h
  5561. SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h
  5562. --------D-215700-----------------------------
  5563. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  5564.     AX = 5700h
  5565.     BX = file handle
  5566. Return: CF clear if successful
  5567.         CX = file's time
  5568.         bits 15-11: hours (0-23)
  5569.              10-5:  minutes
  5570.               4-0:  seconds/2
  5571.         DX = file's date
  5572.         bits 15-9: year - 1980
  5573.               8-5: month
  5574.               4-0: day
  5575.     CF set on error
  5576.         AX = error code (01h,06h) (see AH=59h)
  5577. Note:    under DR-DOS 3.41 and 5.0, this function returns 0 (no date/time) for
  5578.       character devices; MS-DOS returns date and time of opening
  5579. SeeAlso: AX=5701h
  5580. --------D-215701-----------------------------
  5581. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  5582.     AX = 5701h
  5583.     BX = file handle
  5584.     CX = new time (see AX=5700h)
  5585.     DX = new date (see AX=5700h)
  5586. Return: CF clear if successful
  5587.     CF set on error
  5588.         AX = error code (01h,06h) (see AH=59h)
  5589. SeeAlso: AX=5700h
  5590. --------D-215702-----------------------------
  5591. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
  5592.     AX = 5702h
  5593.     BX = file handle
  5594.     CX = size of result buffer or 0000h
  5595.     DS:SI -> EAP list (see below)
  5596.     ES:DI -> buffer for returned EAV list (see below)
  5597. Return:    CF clear if successful
  5598.         CX = size of returned data
  5599.     CF set on error
  5600.         AX = error code (see AH=59h)
  5601. Desc:    get the current value of one or more extended attributes
  5602. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  5603.       returned, only the amount of data which is available
  5604.     the default DOS 4 behavior is to return a single word of 0000h (no
  5605.       structures) in the result buffer if CX>=0002h on entry
  5606. SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  5607.  
  5608. Format of EAP (extended attribute properties) list:
  5609. Offset    Size    Description
  5610.  00h    WORD    number of EAP structures following
  5611.  02h    var    array of EAP structures (see below)
  5612.  
  5613. Format of EAP (extended attribute property) structure:
  5614. Offset    Size    Description
  5615.  00h    BYTE    attribute type
  5616.          01h boolean (either 00h or 01h)
  5617.         02h number (BYTE, WORD, or DWORD)
  5618.         03h string
  5619.         04h date stamp
  5620.         05h time stamp
  5621.  01h    WORD    EAP flags (see below)
  5622.  03h    BYTE    size of reference string (name)
  5623.  04h  N BYTEs    reference string
  5624.  
  5625. Bitfields for EAP flags:
  5626.  bit 12    unchangeable
  5627.  bit 13    ignore
  5628.  bit 14    unchangeable
  5629.  bit 15    used by COMMAND.COM for code page, but not understood by ATTRIB
  5630.  
  5631. Format of EAV (extended attribute value) list:
  5632. Offset    Size    Description
  5633.  00h    WORD    number of EAV structures following
  5634.  02h    var    array of Extended Attribute Value structures
  5635.  
  5636. Format of Extended Attribute Value structures:
  5637. Offset    Size    Description
  5638.  00h  4 BYTEs    ???
  5639.  04h    BYTE    size of reference string
  5640.  05h    WORD    size of value
  5641.  07h    var    reference string
  5642.      var    value
  5643. ----------215702-----------------------------
  5644. INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
  5645.     AX = 5702h
  5646.     BX = file handle
  5647.     CX = size of buffer for information
  5648.     DX = level of information
  5649.     ES:DI -> buffer for information
  5650. Return: CF clear if successful
  5651.     CF set on error
  5652.         AX = error code
  5653. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  5654. ----------215702BXFFFF-----------------------
  5655. INT 21 - OS/2 v1.1+ Family API - DosQPathInfo
  5656.     AX = 5702h
  5657.     BX = FFFFh
  5658.     CX = size of buffer for information
  5659.     DX = level of information
  5660.     DS:SI -> filename
  5661.     ES:DI -> buffer for information
  5662. Return: CF clear if successful
  5663.     CF set on error
  5664.         AX = error code
  5665. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  5666. --------D-215703-----------------------------
  5667. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
  5668.     AX = 5703h
  5669.     BX = file handle
  5670.     CX = size of result buffer or 0000h
  5671.     ES:DI -> result buffer
  5672. Return: CF clear if successful
  5673.         CX = size of returned data
  5674.     CF set on error
  5675.         AX = error code (see AH=59h)
  5676.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  5677. Desc:    get a list of the extended attributes which are defined for the
  5678.       specified file
  5679. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  5680.       returned, only the amount of data which is available
  5681.     the default DOS 4 behavior is to return a trivial EAP list consisting
  5682.       of the single word 0000h (no EAP structures) if CX>=0002h on entry
  5683. SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  5684. ----------215703-----------------------------
  5685. INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
  5686.     AX = 5703h
  5687.     BX = file handle
  5688.     CX = size of information buffer
  5689.     DX = level of information
  5690.     ES:DI -> information buffer
  5691. Return: CF clear if successful
  5692.     CF set on error
  5693.         AX = error code
  5694. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  5695. ----------215703BXFFFF-----------------------
  5696. INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
  5697.     AX = 5703h
  5698.     BX = FFFFh
  5699.     CX = size of information buffer
  5700.     DX = level of information
  5701.     DS:SI -> filename
  5702.     ES:DI -> information buffer
  5703. Return: CF clear if successful
  5704.     CF set on error
  5705.         AX = error code
  5706. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  5707. --------D-215704-----------------------------
  5708. INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
  5709.     AX = 5704h
  5710.     BX = file handle
  5711.     ES:DI -> EAV list (see AX=5702h)
  5712. Return: CF clear if successful
  5713.     CF set on error
  5714.         AX = error code (see AH=59h)
  5715. Note:    the default DOS 4 behavior is to do nothing and return successfully
  5716. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  5717. --------D-2158-------------------------------
  5718. INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
  5719.     AH = 58h
  5720.     AL = subfunction
  5721.         00h get allocation strategy
  5722.         Return: AX = current strategy
  5723.                 00h low memory first fit
  5724.                 01h low memory best fit
  5725.                 02h low memory last fit
  5726.              ---DOS 5+ ---
  5727.                 40h high memory first fit
  5728.                 41h high memory best fit
  5729.                 42h high memory last fit
  5730.                 80h first fit, try high then low memory
  5731.                 81h best fit, try high then low memory
  5732.                 82h last fit, try high then low memory
  5733.         01h set allocation strategy
  5734.         BL = new allocation strategy (see above)
  5735.         BH = 00h (DOS 5+)
  5736. Return: CF clear if successful
  5737.     CF set on error
  5738.         AX = error code (01h) (see AH=59h)
  5739. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  5740.       2 or greater means last fit
  5741.     the Get subfunction returns the last value set
  5742.     setting an allocation strategy involving high memory does not
  5743.       automatically link in the UMB memory chain; this must be done
  5744.       explicitly with AX=5803h in order to actually allocate high memory
  5745.     a program which changes the allocation strategy should restore it
  5746.       before terminating
  5747.     Toshiba MS-DOS 2.11 supports subfunctions 00h and 01h
  5748.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  5749. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  5750. --------D-2158-------------------------------
  5751. INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
  5752.     AH = 58h
  5753.     AL = subfunction
  5754.         02h get UMB link state
  5755.         Return: AL = 00h UMBs not part of DOS memory chain
  5756.                = 01h UMBs in DOS memory chain
  5757.         03h set UMB link state
  5758.         BX = 0000h remove UMBs from DOS memory chain
  5759.            = 0001h add UMBs to DOS memory chain
  5760. Return: CF clear if successful
  5761.     CF set on error
  5762.         AX = error code (01h) (see AH=59h)
  5763. Note:    a program which changes the UMB link state should restore it before
  5764.       terminating
  5765. --------v-2158CC-----------------------------
  5766. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  5767.     AX = 58CCh
  5768. Return: CF clear if resident
  5769. SeeAlso: AX=5252h,AX=58DDh,AX=6969h
  5770. --------v-2158DD-----------------------------
  5771. INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
  5772.     AX = 58DDh
  5773. Return: CX = code segment of virus
  5774.     ES:BX = old INT 21h vector
  5775. SeeAlso: AX=5252h,AX=58CCh,AX=6969h
  5776. --------D-2159--BX0000-----------------------
  5777. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  5778.     AH = 59h
  5779.     BX = 0000h
  5780. Return: AX = extended error code (see below)
  5781.     BH = error class (see below)
  5782.     BL = recommended action (see below)
  5783.     CH = error locus (see below)
  5784.     ES:DI may be pointer (see error code list below)
  5785.     CL, DX, SI, BP, and DS destroyed
  5786. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  5787.       one supported under DOS 2.x
  5788.     you should call this function to retrieve the true error code when an
  5789.       FCB or DOS 2.x call returns an error
  5790.     under DR-DOS 5.0, this function does not use any of the DOS-internal
  5791.       stacks and may thus be called at any time
  5792. SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
  5793.  
  5794. Values for extended error code:
  5795.  00h (0)   no error
  5796.  01h (1)   function number invalid
  5797.  02h (2)   file not found
  5798.  03h (3)   path not found
  5799.  04h (4)   too many open files (no handles available)
  5800.  05h (5)   access denied
  5801.  06h (6)   invalid handle
  5802.  07h (7)   memory control block destroyed
  5803.  08h (8)   insufficient memory
  5804.  09h (9)   memory block address invalid
  5805.  0Ah (10)  environment invalid (usually >32K in length)
  5806.  0Bh (11)  format invalid
  5807.  0Ch (12)  access code invalid
  5808.  0Dh (13)  data invalid
  5809.  0Eh (14)  reserved
  5810.  0Fh (15)  invalid drive
  5811.  10h (16)  attempted to remove current directory
  5812.  11h (17)  not same device
  5813.  12h (18)  no more files
  5814. ---DOS 3+---
  5815.  13h (19)  disk write-protected
  5816.  14h (20)  unknown unit
  5817.  15h (21)  drive not ready
  5818.  16h (22)  unknown command
  5819.  17h (23)  data error (CRC)
  5820.  18h (24)  bad request structure length
  5821.  19h (25)  seek error
  5822.  1Ah (26)  unknown media type (non-DOS disk)
  5823.  1Bh (27)  sector not found
  5824.  1Ch (28)  printer out of paper
  5825.  1Dh (29)  write fault
  5826.  1Eh (30)  read fault
  5827.  1Fh (31)  general failure
  5828.  20h (32)  sharing violation
  5829.  21h (33)  lock violation
  5830.  22h (34)  disk change invalid
  5831.     ES:DI -> ASCIZ volume label of required disk
  5832.  23h (35)  FCB unavailable
  5833.  24h (36)  sharing buffer overflow
  5834.  25h (37)  (DOS 4+) code page mismatch
  5835.  26h (38)  (DOS 4+) cannot complete file operation (out of input)
  5836.  27h (39)  (DOS 4+) insufficient disk space
  5837.  28h-31h   reserved
  5838.  32h (50)  network request not supported
  5839.  33h (51)  remote computer not listening
  5840.  34h (52)  duplicate name on network
  5841.  35h (53)  network name not found
  5842.  36h (54)  network busy
  5843.  37h (55)  network device no longer exists
  5844.  38h (56)  network BIOS command limit exceeded
  5845.  39h (57)  network adapter hardware error
  5846.  3Ah (58)  incorrect response from network
  5847.  3Bh (59)  unexpected network error
  5848.  3Ch (60)  incompatible remote adapter
  5849.  3Dh (61)  print queue full
  5850.  3Eh (62)  queue not full
  5851.  3Fh (63)  not enough space to print file
  5852.  40h (64)  network name was deleted
  5853.  41h (65)  network: Access denied
  5854.  42h (66)  network device type incorrect
  5855.  43h (67)  network name not found
  5856.  44h (68)  network name limit exceeded
  5857.  45h (69)  network BIOS session limit exceeded
  5858.  46h (70)  temporarily paused
  5859.  47h (71)  network request not accepted
  5860.  48h (72)  network print/disk redirection paused
  5861.  49h (73)  network software not installed
  5862.        (LANtastic) invalid network version
  5863.  4Ah (74)  unexpected adapter close
  5864.        (LANtastic) account expired
  5865.  4Bh (75)  (LANtastic) password expired
  5866.  4Ch (76)  (LANtastic) login attempt invalid at this time
  5867.  4Dh (77)  (LANtastic v3+) disk limit exceeded on network node
  5868.  4Eh (78)  (LANtastic v3+) not logged in to network node
  5869.  4Fh (79)  reserved
  5870.  50h (80)  file exists
  5871.  51h (81)  reserved
  5872.  52h (82)  cannot make directory
  5873.  53h (83)  fail on INT 24h
  5874.  54h (84)  (DOS 3.3+) too many redirections
  5875.  55h (85)  (DOS 3.3+) duplicate redirection
  5876.  56h (86)  (DOS 3.3+) invalid password
  5877.  57h (87)  (DOS 3.3+) invalid parameter
  5878.  58h (88)  (DOS 3.3+) network write fault
  5879.  59h (89)  (DOS 4+) function not supported on network
  5880.  5Ah (90)  (DOS 4+) required system component not installed
  5881.  64h (100) (MSCDEX) unknown error
  5882.  65h (101) (MSCDEX) not ready
  5883.  66h (102) (MSCDEX) EMS memory no longer valid
  5884.  67h (103) (MSCDEX) not High Sierra or ISO-9660 format
  5885.  68h (104) (MSCDEX) door open
  5886.  
  5887. Values for Error Class:
  5888.  01h out of resource (storage space or I/O channels)
  5889.  02h temporary situation (file or record lock)
  5890.  03h authorization (denied access)
  5891.  04h internal (system software bug)
  5892.  05h hardware failure
  5893.  06h system failure (configuration file missing or incorrect)
  5894.  07h application program error
  5895.  08h not found
  5896.  09h bad format
  5897.  0Ah locked
  5898.  0Bh media error
  5899.  0Ch already exists
  5900.  0Dh unknown
  5901.  
  5902. Values for Suggested Action:
  5903.  01h retry
  5904.  02h delayed retry
  5905.  03h prompt user to reenter input
  5906.  04h abort after cleanup
  5907.  05h immediate abort
  5908.  06h ignore
  5909.  07h retry after user intervention
  5910.  
  5911. Values for Error Locus:
  5912.  01h unknown or not appropriate
  5913.  02h block device (disk error)
  5914.  03h network related
  5915.  04h serial device (timeout)
  5916.  05h memory related
  5917. --------D-2159--BX0001-----------------------
  5918. INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
  5919.     AH = 59h
  5920.     BX = 0001h
  5921. Return: ES:DI -> hard error information packet (see below) for most recent
  5922.         hard (critical) error
  5923. SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
  5924.  
  5925. Format of hard error information packet:
  5926. Offset    Size    Description
  5927.  00h    WORD    contents of AX at system entry
  5928.  02h    WORD    Process ID which encountered error
  5929.  04h    WORD    contents of AX at time of error
  5930.  06h    BYTE    error type
  5931.         00h physical I/O error
  5932.         01h disk change request
  5933.         02h file sharing violation
  5934.         03h FCB problem
  5935.         04h file locking violation
  5936.         05h bad FAT
  5937.         06h network detected error
  5938.  07h    BYTE    INT 24 error code
  5939.  08h    WORD    extended error code (see AH=59h/BX=0000h)
  5940.  0Ah    DWORD    pointer to associated device
  5941. --------D-215A-------------------------------
  5942. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  5943.     AH = 5Ah
  5944.     CX = file attribute (see AX=4301h)
  5945.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  5946.         generated filename
  5947. Return: CF clear if successful
  5948.         AX = file handle opened for read/write in compatibility mode
  5949.         DS:DX pathname extended with generated name for temporary file
  5950.     CF set on error
  5951.         AX = error code (03h,04h,05h) (see AH=59h)
  5952. Desc:    creates a file with a unique name which must be explicitly deleted
  5953. BUGS:    COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  5954.       wraps around to the end of the segment
  5955.     MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
  5956.       hang the system if the specified path is the root directory and the
  5957.       root directory is full (no free directory entries)
  5958. Note:    under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  5959. SeeAlso: AH=3Ch,AH=5Bh
  5960. --------D-215B-------------------------------
  5961. INT 21 - DOS 3+ - CREATE NEW FILE
  5962.     AH = 5Bh
  5963.     CX = file attribute (see AX=4301h)
  5964.     DS:DX -> ASCIZ filename
  5965. Return: CF clear if successful
  5966.         AX = file handle opened for read/write in compatibility mode
  5967.     CF set on error
  5968.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  5969. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  5970.       rather than truncating it; this permits its use in creating semaphore
  5971.       files because it is an atomic "test and set" operation
  5972.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5973. SeeAlso: AH=3Ch,AH=5Ah
  5974. --------D-215C-------------------------------
  5975. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  5976.     AH = 5Ch
  5977.     AL = subfunction
  5978.         00h lock region of file
  5979.         01h unlock region of file
  5980.     BX = file handle
  5981.     CX:DX = start offset of region within file
  5982.     SI:DI = length of region in bytes
  5983. Return: CF clear if successful
  5984.     CF set on error
  5985.         AX = error code (01h,06h,21h,24h) (see AH=59h)
  5986. Notes:    error returned unless SHARE or network installed
  5987.     an unlock call must specify the same region as some prior lock call
  5988.     locked regions become entirely inaccessible to other processes
  5989.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  5990.       handles inherited by child processes (see AH=4Bh) do not
  5991.     under DR-DOS 3.41 and 5.0, if a process opens a file without the no-
  5992.       inherit flag and then starts a child, any locks set by the parent
  5993.       are ignored, and the child will only get an error if it tries to
  5994.       lock an area previously locked by the parent process
  5995. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  5996. --------D-215D00-----------------------------
  5997. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  5998.     AX = 5D00h
  5999.     DS:DX -> DOS parameter list (see below)
  6000.     DPL contains all register values for a call to INT 21h
  6001. Return: as appropriate for function being called
  6002. Notes:    does not check AH.  Out of range values will crash the system
  6003.     executes using specified computer ID and process ID
  6004.     sharing delay loops skipped
  6005.     a special sharing mode is enabled to handle FCBs opened across network
  6006.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
  6007.       MS-DOS; under DR-DOS 3.41, wildcards corrupt the filesystem; and
  6008.       under DR-DOS 5.0, the call returns error code 03h
  6009.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  6010.       DELETE (AH=41h), and RENAME (AH=56h)
  6011.     functions which take filenames require canonical names (as returned
  6012.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  6013. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  6014.  
  6015. Format of DOS parameter list:
  6016. Offset    Size    Description
  6017.  00h    WORD    AX 
  6018.  02h    WORD    BX
  6019.  04h    WORD    CX
  6020.  06h    WORD    DX
  6021.  08h    WORD    SI
  6022.  0Ah    WORD    DI
  6023.  0Ch    WORD    DS
  6024.  0Eh    WORD    ES
  6025.  10h    WORD    reserved (0)
  6026.  12h    WORD    computer ID (0 = current system)
  6027.  14h    WORD    process ID (PSP segment on specified computer)
  6028. Note:    under Windows Enhanced mode, the computer ID is normally the virtual
  6029.       machine ID (see INT 2F/AX=1683h), though this can reportedly be
  6030.       changed by setting UniqueDOSPSP= in SYSTEM.INI
  6031. --------D-215D01-----------------------------
  6032. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  6033.     AX = 5D01h
  6034.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6035.         process ID fields used
  6036. Return: CF set on error
  6037.         AX = error code (see AH=59h)
  6038.     CF clear if successful
  6039. Notes:    flushes buffers and updates directory entries for each file which has
  6040.       been written to; if remote file, calls INT 2F/AX=1107h
  6041.     the computer ID and process ID are stored but ignored under DOS 3.3
  6042.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6043. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  6044. --------D-215D02-----------------------------
  6045. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  6046.     AX = 5D02h
  6047.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  6048.         computer ID, and process ID used
  6049.     DPL's DS:DX -> ASCIZ name of file to close
  6050. Return: CF set on error
  6051.         AX = error code (see AH=59h)
  6052.     CF clear if successful
  6053. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  6054.     name must be canonical fully-qualified, such as returned by AH=60h
  6055.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6056. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  6057. --------D-215D03-----------------------------
  6058. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  6059.     AX = 5D03h
  6060.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  6061. Return: CF set on error
  6062.         AX = error code (see AH=59h)
  6063.     CF clear if successful
  6064. Notes:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  6065.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6066. SeeAlso: AX=5D02h,AX=5D04h
  6067. --------D-215D04-----------------------------
  6068. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  6069.     AX = 5D04h
  6070.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6071.         process ID fields used
  6072. Return: CF set on error
  6073.         AX = error code (see AH=59h)
  6074.     CF clear if successful
  6075. Notes:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  6076.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6077. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  6078. --------D-215D05-----------------------------
  6079. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  6080.     AX = 5D05h
  6081.     DS:DX -> DOS parameter list (see AX=5D00h)
  6082.     DPL's BX = index of sharing record (see AH=52h)
  6083.     DPL's CX = index of SFT in sharing record's SFT list
  6084. Return: CF clear if successful
  6085.         ES:DI -> ASCIZ filename
  6086.         BX = network machine number of SFT's owner
  6087.         CX = number of locks held by SFT's owner
  6088.     CF set if either index out of range
  6089.         AX = 0012h (no more files)
  6090. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  6091.     names are always canonical fully-qualified, such as returned by AH=60h
  6092.     not supported by DR-DOS 3.41 and 5.0, but does not return an error
  6093. SeeAlso: AH=5Ch,AH=60h 
  6094. --------D-215D06-----------------------------
  6095. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  6096.     AX = 5D06h
  6097. Return: CF set on error
  6098.        AX = error code (see AH=59h)
  6099.     CF clear if successful
  6100.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  6101.         (critical error flag is first byte)
  6102.         CX = size in bytes of area which must be swapped while in DOS
  6103.         DX = size in bytes of area which must always be swapped
  6104. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  6105.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  6106.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  6107.       DOS 2.x by forcing use of correct stack
  6108.     swapping the data area allows reentering DOS unless DOS is in a
  6109.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  6110.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  6111.     SHARE and other DOS utilities consult the byte at offset 04h in the
  6112.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  6113.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  6114.     DR-DOS 3.41+ supports this function, but the SDA format beyond the
  6115.       first 18h bytes is completely different from MS-DOS
  6116. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  6117.  
  6118. Format of DOS 3.10-3.30 Swappable Data Area:
  6119. Offset    Size    Description
  6120.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  6121.          enabled critical-section calls (see INT 2A/AH=80h)
  6122.         (not actually part of the SDA)
  6123.  -1    BYTE    unused padding
  6124.  00h    BYTE    critical error flag ("ErrorMode")
  6125.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6126.  02h    BYTE    drive on which current critical error occurred, or FFh
  6127.          (DR-DOS sets to drive number during INT 24, 00h otherwise)
  6128.  03h    BYTE    locus of last error
  6129.  04h    WORD    extended error code of last error
  6130.  06h    BYTE    suggested action for last error
  6131.  07h    BYTE    class of last error
  6132.  08h    DWORD    ES:DI pointer for last error
  6133.  0Ch    DWORD    current DTA
  6134.  10h    WORD    current PSP
  6135.  12h    WORD    stores SP across an INT 23
  6136.  14h    WORD    return code from last process termination (zerod after reading
  6137.         with AH=4Dh)
  6138.  16h    BYTE    current drive
  6139.  17h    BYTE    extended break flag
  6140. ---remainder need only be swapped if in DOS---
  6141.  18h    WORD    value of AX on call to INT 21
  6142.  1Ah    WORD    PSP segment for sharing/network
  6143.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  6144.  1Eh    WORD    first usable memory block found when allocating memory
  6145.  20h    WORD    best usable memory block found when allocating memory
  6146.  22h    WORD    last usable memory block found when allocating memory
  6147.  24h    WORD    memory size in paragraphs (used only during initialization)
  6148.  26h    WORD    last entry checked during directory search
  6149.  28h    BYTE    flag: INT 24 returned Fail
  6150.  29h    BYTE    flags: allowable INT 24 actions (passed to INT 24 in AH)
  6151.  2Ah    BYTE    directory flag (00h directory, 01h file)
  6152.  2Bh    BYTE    flag: FFh if Ctrl-Break termination, 00h otherwise
  6153.  2Ch    BYTE    flag: allow embedded blanks in FCB
  6154.  2Dh    BYTE    padding (unused)
  6155.  2Eh    BYTE    day of month
  6156.  2Fh    BYTE    month
  6157.  30h    WORD    year - 1980
  6158.  32h    WORD    number of days since 1-1-1980
  6159.  34h    BYTE    day of week (0 = Sunday)
  6160.  35h    BYTE    flag: console swapped during read from device
  6161.  36h    BYTE    flag: safe to call INT 28 if nonzero
  6162.  37h    BYTE    flag: if nonzero, INT 24 Abort turned into INT 24 Fail
  6163.         (set only during process termination)
  6164.  38h 26 BYTEs    device driver request header (see INT 2F/AX=0802h)
  6165.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  6166.  56h 22 BYTEs    device driver request header for I/O calls
  6167.  6Ch 14 BYTEs    device driver request header for disk status check
  6168.  7Ah    DWORD    pointer to device I/O buffer???
  6169.  7Eh    WORD    ???
  6170.  80h    WORD    ??? 
  6171.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  6172.  83h    BYTE    padding (unused)
  6173.  84h  3 BYTEs    24-bit user number (see AH=30h)
  6174.  87h    BYTE    OEM number (see AH=30h)
  6175.  88h    WORD    offset to error code conversion table for INT 25/INT 26
  6176.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6177.  90h    BYTE    device I/O buffer for single-byte I/O functions
  6178.  91h    BYTE    padding??? (unused)
  6179.  92h 128 BYTEs    buffer for filename
  6180. 112h 128 BYTEs    buffer for filename
  6181. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6182. 1A7h 32 BYTEs    directory entry for found file (see AH=11h)
  6183. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  6184. 218h 11 BYTEs    FCB-format filename for device name comparison
  6185. 223h    BYTE    terminating NUL for above filename
  6186. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6187. 22Fh    BYTE    terminating NUL for above spec
  6188. 230h    BYTE    ???
  6189. 231h    WORD    destination file/directory starting sector
  6190. 233h  5 BYTEs    ???
  6191. 238h    BYTE    extended FCB file attribute
  6192. 239h    BYTE    type of FCB (00h regular, FFh extended)
  6193. 23Ah    BYTE    directory search attributes
  6194. 23Bh    BYTE    file open/access mode
  6195. 23Ch    BYTE    file found/delete flag
  6196.         bit 0: file found
  6197.         bit 4: file deleted
  6198. 23Dh    BYTE    flag: device name found on rename, or file not found
  6199. 23Eh    BYTE    splice flag (file name and directory name together)
  6200. 23Fh    BYTE    flag indicating how DOS function was invoked
  6201.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6202. 240h    BYTE    sector position within cluster
  6203. 241h    BYTE    flag: translate sector/cluster (00h no, 01h yes)
  6204. 242h    BYTE    flag: 00h if read, 01h if write
  6205. 243h    BYTE    current working drive number
  6206. 244h    BYTE    cluster factor
  6207. 245h    BYTE    flag: cluster split mode
  6208. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  6209. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  6210. 248h    BYTE    volume ID flag
  6211. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  6212. 24Ah    BYTE    file create flag (00h = no)
  6213. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  6214.         (normally E5h, but 00h as described under INT 21/AH=13h)
  6215. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  6216.         temp: used during process termination
  6217. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  6218. 254h    WORD    stores SP across INT 24
  6219. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  6220. 25Ah    WORD    saving partial cluster number
  6221. 25Ch    WORD    temp: sector of work current cluster
  6222. 25Eh    WORD    high part of cluster number (only low byte referenced)
  6223. 260h    WORD    ??? temp
  6224. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6225. 263h    BYTE    padding (unused)
  6226. 264h    DWORD    pointer to device header
  6227. 268h    DWORD    pointer to current SFT
  6228. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  6229. 270h    DWORD    pointer to caller's FCB
  6230. 274h    WORD    number of SFT to which file being opened will refer
  6231. 276h    WORD    temporary storage for file handle
  6232. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6233. 27Ch    WORD    offset in DOS DS of first filename argument
  6234. 27Eh    WORD    offset in DOS DS of second filename argument
  6235. 280h    WORD    offset of last component in pathname or FFFFh
  6236. 282h    WORD    offset of transfer address to add
  6237. 284h    WORD    last relative cluster within file being accessed
  6238. 286h    WORD    temp: absolute cluster number being accessed
  6239. 288h    WORD    directory sector number
  6240. 28Ah    WORD    ??? current cluster number
  6241. 28Ch    WORD    ??? current offset in file DIV bytes per sector
  6242. 28Eh    WORD    current sector number
  6243. 290h    WORD    current byte offset within sector
  6244. 292h    DWORD    current offset in file
  6245. 296h    DWORD    temp: file byte count
  6246. 29Ah    WORD    temp: file byte count
  6247. 29Ch    WORD    free file cluster entry
  6248. 29Eh    WORD    last file cluster entry
  6249. 2A0h    WORD    next file cluster number
  6250. 2A2h    DWORD    number of bytes appended to file
  6251. 2A6h    DWORD    pointer to current work disk buffer
  6252. 2AAh    DWORD    pointer to working SFT
  6253. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  6254. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  6255. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  6256. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  6257.         also switched to for duration of INT 24
  6258. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6259.         (see AH=4Eh)
  6260. 2CDh 32 BYTEs    directory entry for file being renamed (see AH=11h for format)
  6261. 2EDh 331 BYTEs    critical error stack
  6262.    403h     35 BYTEs scratch SFT
  6263. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6264. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6265. ---DOS 3.2,3.3x only---
  6266. 738h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  6267. 739h    BYTE    volume change flag
  6268. 73Ah    BYTE    flag: virtual open
  6269. 73Bh    BYTE    ???
  6270. --------D-215D07-----------------------------
  6271. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  6272.     AX = 5D07h
  6273. Return: DL = mode
  6274.         00h redirected output is combined
  6275.         01h redirected output in separate print jobs
  6276. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  6277. --------D-215D08-----------------------------
  6278. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  6279.     AX = 5D08h
  6280.     DL = mode
  6281.         00h redirected output is combined
  6282.         01h redirected output placed in separate jobs, start new print job
  6283.         now
  6284. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  6285. --------D-215D09-----------------------------
  6286. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  6287.     AX = 5D09h
  6288. Note:    forces redirected printer output to be printed, and starts a new print
  6289.       job
  6290. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  6291. --------D-215D0A-----------------------------
  6292. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  6293.     AX = 5D0Ah
  6294.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  6295. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  6296.       DX,DI, and ES in corresponding registers
  6297. Notes:    documented for DOS 5+, but undocumented in earlier versions
  6298.     the MS-DOS Programmer's Reference incorrectly states that this call was
  6299.       introduced in DOS 4, and fails to mention that the ERROR structure
  6300.       passed to this function is a DOS parameter list.
  6301. BUG:    DR-DOS 3.41 and 5.0 read the value for ES from the DS field of the DPL;
  6302.       fortunately, MS-DOS ignores the DS field, allowing a generic routine
  6303.       which sets both DS and ES fields to the same value
  6304. SeeAlso: AH=59h
  6305. --------D-215D0B-----------------------------
  6306. INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  6307.     AX = 5D0Bh
  6308. Return: CF set on error
  6309.         AX = error code (see AH=59h)
  6310.     CF clear if successful
  6311.         DS:SI -> swappable data area list (see below)
  6312. Notes:    copying and restoring the swappable data areas allows DOS to be
  6313.       reentered unless it is in a critical section delimited by calls to
  6314.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  6315.     SHARE and other DOS utilities consult the byte at offset 04h in the
  6316.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  6317.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  6318. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
  6319.  
  6320. Format of DOS 4.x swappable data area list:
  6321. Offset    Size    Description
  6322.  00h    WORD    count of data areas
  6323.  02h  N BYTEs    "count" copies of data area record
  6324.         Offset    Size    Description
  6325.          00h    DWORD    address
  6326.          04h    WORD    length and type
  6327.                 bit 15 set if swap always, clear if swap in DOS
  6328.                 bits 14-0: length in bytes
  6329.  
  6330. Format of DOS 4.0-6.0 swappable data area:
  6331. Offset    Size    Description
  6332.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  6333.          enabled critical-section calls (see INT 2A/AH=80h)
  6334.         (not actually part of the SDA; all offsets are 0D0Ch, but this
  6335.         list is still present for DOS 3.x compatibility)
  6336.  -1    BYTE    unused padding
  6337.  00h    BYTE    critical error flag ("ErrorMode")
  6338.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6339.  02h    BYTE    drive on which current critical error occurred or FFh
  6340.  03h    BYTE    locus of last error
  6341.  04h    WORD    extended error code of last error
  6342.  06h    BYTE    suggested action for last error
  6343.  07h    BYTE    class of last error
  6344.  08h    DWORD    ES:DI pointer for last error
  6345.  0Ch    DWORD    current DTA
  6346.  10h    WORD    current PSP
  6347.  12h    WORD    stores SP across an INT 23
  6348.  14h    WORD    return code from last process termination (zerod after reading
  6349.         with AH=4Dh)
  6350.  16h    BYTE    current drive
  6351.  17h    BYTE    extended break flag
  6352.  18h     BYTE    flag: code page switching
  6353.  19h    BYTE    flag: copy of previous byte in case of INT 24 Abort
  6354. ---remainder need only be swapped if in DOS---
  6355.  1Ah    WORD    value of AX on call to INT 21
  6356.  1Ch    WORD    PSP segment for sharing/network
  6357.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  6358.  20h    WORD    first usable memory block found when allocating memory
  6359.  22h    WORD    best usable memory block found when allocating memory
  6360.  24h    WORD    last usable memory block found when allocating memory
  6361.  26h    WORD    memory size in paragraphs (used only during initialization)
  6362.  28h    WORD    last entry checked during directory search
  6363.  2Ah    BYTE    flag: nonzero if INT 24 Fail
  6364.  2Bh    BYTE    flags: allowable INT 24 responses (passed to INT 24 in AH)
  6365.  2Ch    BYTE    flag: do not set directory if nonzero
  6366.  2Dh    BYTE    flag: program aborted by ^C
  6367.  2Eh    BYTE    flag: allow embedded blanks in FCB
  6368.  2Fh    BYTE    padding (unused)
  6369.  30h    BYTE    day of month
  6370.  31h    BYTE    month
  6371.  32h    WORD    year - 1980
  6372.  34h    WORD    number of days since 1-1-1980
  6373.  36h    BYTE    day of week (0 = Sunday)
  6374.  37h    BYTE    flag: console swapped during read from device
  6375.  38h    BYTE    flag: safe to call INT 28 if nonzero
  6376.  39h    BYTE    flag: abort currently in progress, turn INT 24 Abort into Fail
  6377.  3Ah 30 BYTEs    device driver request header (see INT 2F/AX=0802h) for
  6378.          device calls
  6379.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  6380.  5Ch 22 BYTEs    device driver request header for I/O calls
  6381.  72h 14 BYTEs    device driver request header for disk status check
  6382.  80h    DWORD    pointer to device I/O buffer
  6383.  84h    WORD    ???
  6384.  86h    WORD    ??? (0)
  6385.  88h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  6386.  89h    DWORD    start offset of file region to lock/unlock
  6387.  8Dh    DWORD    length of file region to lock/unlock
  6388.  91h    BYTE    padding (unused)
  6389.  92h  3 BYTEs    24-bit user number (see AH=30h)
  6390.  95h    BYTE    OEM number (see AH=30h)
  6391.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6392.  9Ch    BYTE    device I/O buffer for single-byte I/O functions???
  6393.  9Dh    BYTE    padding???
  6394.  9Eh 128 BYTEs    buffer for filename
  6395. 11Eh 128 BYTEs    buffer for filename
  6396. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6397. 1B3h 32 BYTEs    directory entry for found file (see AH=11h)
  6398. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  6399. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  6400. 236h    BYTE    terminating NUL for above filename
  6401. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6402. 242h    BYTE    terminating NUL for above spec
  6403. 243h    BYTE    ???
  6404. 244h    WORD    ???
  6405. 246h  5 BYTEs    ???
  6406. 24Bh    BYTE    extended FCB file attributes
  6407. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  6408. 24Dh    BYTE    directory search attributes
  6409. 24Eh    BYTE    file open/access mode
  6410. 24Fh    BYTE    ??? flag bits
  6411. 250h    BYTE    flag: device name found on rename, or file not found
  6412. 251h    BYTE    splice flag??? (file name and directory name together)
  6413. 252h    BYTE    flag indicating how DOS function was invoked
  6414.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6415. 253h    BYTE    ???
  6416. 254h    BYTE    ???
  6417. 255h    BYTE    ???
  6418. 256h    BYTE    ???
  6419. 257h    BYTE    ???
  6420. 258h    BYTE    ???
  6421. 259h    BYTE    ???
  6422. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  6423. 25Bh    BYTE    ???
  6424. 25Ch    BYTE    type of process termination (00h-03h)
  6425. 25Dh    BYTE    ???
  6426. 25Eh    BYTE    ???
  6427. 25Fh    BYTE    ???
  6428. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  6429. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  6430. 268h    WORD    stores SP???
  6431. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  6432. 26Eh    WORD    segment of disk buffer
  6433. 270h    WORD    ???
  6434. 272h    WORD    ???
  6435. 274h    WORD    ???
  6436. 276h    WORD    ???
  6437. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6438. 279h    BYTE    ??? (doesn't seem to be referenced)
  6439. 27Ah    DWORD    pointer to ???
  6440. 27Eh    DWORD    pointer to current SFT
  6441. 282h    DWORD    pointer to current directory structure for drive being accessed
  6442. 286h    DWORD    pointer to caller's FCB
  6443. 28Ah    WORD    SFT index to which file being opened will refer
  6444. 28Ch    WORD    temporary storage for file handle
  6445. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6446. 292h    WORD    offset in DOS DS of first filename argument
  6447. 294h    WORD    offset in DOS DS of second filename argument
  6448. 296h    WORD    ???
  6449. 298h    WORD    ???
  6450. 29Ah    WORD    ???
  6451. 29Ch    WORD    ???
  6452. 29Eh    WORD    ???
  6453. 2A0h    WORD    ???
  6454. 2A2h    WORD    ??? directory cluster number???
  6455. 2A4h    DWORD    ???
  6456. 2A8h    DWORD    ???
  6457. 2ACh    WORD    ???
  6458. 2AEh    DWORD    offset in file???
  6459. 2B2h    WORD    ???
  6460. 2B4h    WORD    bytes in partial sector
  6461. 2B6h    WORD    number of sectors
  6462. 2B8h    WORD    ???
  6463. 2BAh    WORD    ???
  6464. 2BCh    WORD    ???
  6465. 2BEh    DWORD    number of bytes appended to file
  6466. 2C2h    DWORD    pointer to ??? disk buffer
  6467. 2C6h    DWORD    pointer to ??? SFT
  6468. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  6469. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  6470. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  6471. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  6472.         also switched to for duration of INT 24
  6473. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  6474. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  6475.         performed, and 01h or 03h by INT 21/AX=6C00h)
  6476. 2D7h    WORD    ??? apparently unused
  6477. 2D9h    DWORD    stored ES:DI for AX=6C00h
  6478. 2DDh    WORD    extended file open action code (see AX=6C00h)
  6479. 2DFh    WORD    extended file open attributes (see AX=6C00h)
  6480. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  6481. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  6482. 2E7h    WORD    ???
  6483. 2E9h    WORD    ???
  6484. 2EBh    BYTE    ???
  6485. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  6486. 2EEh    WORD    ???
  6487. 2F0h    BYTE    ???
  6488. 2F1h    WORD    ??? bit flags
  6489. 2F3h    DWORD    pointer to user-supplied filename
  6490. 2F7h    DWORD    pointer to ???
  6491. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  6492. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  6493. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  6494. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6495.         (see AH=4Eh)
  6496. 315h 32 BYTEs    directory entry for file being renamed (see AH=11h)
  6497. 335h 331 BYTEs    critical error stack
  6498. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6499. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6500. 780h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  6501. 781h    BYTE    volume change flag
  6502. 782h    BYTE    flag: virtual open
  6503. 783h    BYTE    ???
  6504. 784h    WORD    ???
  6505. 786h    WORD    ???
  6506. 788h    WORD    ???
  6507. 78Ah    WORD    ???
  6508. --------D-215E00-----------------------------
  6509. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  6510.     AX = 5E00h
  6511.     DS:DX -> 16-byte buffer for ASCIZ machine name
  6512. Return: CF clear if successful
  6513.         CH = validity
  6514.         00h name invalid
  6515.         nonzero valid
  6516.             CL = NetBIOS number for machine name
  6517.             DS:DX buffer filled with blank-paded name
  6518.     CF set on error
  6519.         AX = error code (01h) (see AH=59h)
  6520. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  6521. SeeAlso: AX=5E01h
  6522. --------D-215E01CH00-------------------------
  6523. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  6524.     AX = 5E01h
  6525.     CH = 00h undefine name (make it invalid)
  6526.        <> 0     define name
  6527.     CL = name number
  6528.     DS:DX -> 15-character blank-padded ASCIZ name
  6529. SeeAlso: AX=5E00h
  6530. --------D-215E02-----------------------------
  6531. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  6532.     AX = 5E02h
  6533.     BX = redirection list index (see AX=5F02h)
  6534.     CX = length of setup string
  6535.     DS:SI -> setup string
  6536. Return: CF clear if successful
  6537.     CF set on error
  6538.         AX = error code (01h) (see AH=59h)
  6539. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  6540. --------D-215E03-----------------------------
  6541. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  6542.     AX = 5E03h
  6543.     BX = redirection list index (see AX=5F02h)
  6544.     ES:DI -> 64-byte buffer for setup string
  6545. Return: CF clear if successful
  6546.         CX = length of setup string
  6547.         ES:DI buffer filled
  6548.     CF set on error
  6549.         AX = error code (01h) (see AH=59h)
  6550. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  6551. --------D-215E04-----------------------------
  6552. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  6553.     AX = 5E04h
  6554.     BX = redirection list index (see AX=5F02h)
  6555.     DX = mode
  6556.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  6557. Return: CF set on error
  6558.         AX = error code (see AH=59h)
  6559.     CF clear if successful
  6560. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  6561. SeeAlso: AX=5E05h,INT 2F/AX=111Fh
  6562. --------D-215E05-----------------------------
  6563. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  6564.     AX = 5E05h
  6565.     BX = redirection list index (see AX=5F02h)
  6566. Return: CF set on error
  6567.         AX = error code (see AH=59h)
  6568.     CF clear if successful
  6569.         DX = printer mode (see AX=5E04h)
  6570. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  6571. SeeAlso: AX=5E04h,INT 2F/AX=111Fh
  6572. --------D-215F00-----------------------------
  6573. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  6574.     AX = 5F00h
  6575.     BL = redirection type
  6576.         03h printer
  6577.         04h disk drive
  6578. Return: CF set on error
  6579.         AX = error code (see AH=59h)
  6580.     CF clear if successful
  6581.         BH = redirection state
  6582.         00h off
  6583.         01h on
  6584. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  6585. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  6586. --------D-215F01-----------------------------
  6587. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  6588.     AX = 5F01h
  6589.     BL = redirection type
  6590.         03h printer
  6591.         04h disk drive
  6592.     BH = redirection state
  6593.         00h off
  6594.         01h on
  6595. Return: CF set on error
  6596.         AX = error code (see AH=59h)
  6597.     CF clear if successful
  6598. Notes:    when redirection is off, the local device (if any) rather than the
  6599.       remote device is used
  6600.     calls INT 2F/AX=111Eh with AX on top of the stack
  6601. SeeAlso: AX=5F00h,INT 2F/AX=111Eh
  6602. --------D-215F02-----------------------------
  6603. INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY
  6604.     AX = 5F02h
  6605.     BX = redirection list index
  6606.     CX = 0000h (LANtastic)
  6607.     DS:SI -> 16-byte buffer for ASCIZ device name
  6608.     ES:DI -> 128-byte buffer for ASCIZ network name
  6609. Return: CF clear if successful
  6610.         BH = device status
  6611.         00h valid
  6612.         01h invalid
  6613.         BL = device type
  6614.         03h printer
  6615.         04h disk drive
  6616.         CX = user data previously set with AX=5F03h
  6617.         DS:SI and ES:DI buffers filled
  6618.         DX,BP destroyed
  6619.     CF set on error
  6620.         AX = error code (01h,12h) (see AH=59h)
  6621. Notes:    this function is passed through to INT 2F/AX=111Eh
  6622.     error code 12h is returned if BX is greater than the size of the list
  6623.     also supported by Banyan VINES, PC-NFS, and LANtastic
  6624. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  6625. --------D-215F03-----------------------------
  6626. INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - REDIRECT DEVICE
  6627.     AX = 5F03h
  6628.     BL = device type
  6629.         03h printer
  6630.         04h disk drive
  6631.     CX = user data to save
  6632.         0000h for LANtastic
  6633.         4E57h ("NW") for NetWare 4.0 requester
  6634.     DS:SI -> ASCIZ local device name (16 bytes max)
  6635.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  6636. Return: CF clear if successful
  6637.     CF set on error
  6638.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  6639. Notes:    if device type is disk drive, DS:SI must point at either a null string
  6640.       or a string consisting the drive letter followed by a colon; if a
  6641.       null string, the network attempts to access the destination without
  6642.       redirecting a local drive
  6643.     calls INT 2F/AX=111Eh with AX on top of the stack
  6644. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
  6645. --------D-215F04-----------------------------
  6646. INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - CANCEL REDIRECTION
  6647.     AX = 5F04h
  6648.     DS:SI -> ASCIZ device name or path
  6649.     CX = 4E57h ("NW") for NetWare 4.0 requester
  6650. Return: CF clear if successful
  6651.     CF set on error
  6652.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  6653. Notes:    the DS:SI string must be either a local device name, a drive letter
  6654.       followed by a colon, or a network directory beginning with two
  6655.       backslashes
  6656.     calls INT 2F/AX=111Eh with AX on top of the stack
  6657. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  6658. --------D-215F05-----------------------------
  6659. INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
  6660.     AX = 5F05h
  6661.     BX = redirection list index
  6662.     DS:SI -> buffer for ASCIZ source device name
  6663.     ES:DI -> buffer for destination ASCIZ network path
  6664. Return: CF set on error
  6665.         AX = error code (see AH=59h)
  6666.     CF clear if successful
  6667.         BH = device status flag (bit 0 clear if valid)
  6668.         BL = device type (03h if printer, 04h if drive)
  6669.         CX = stored parameter value (user data)
  6670.         BP = NETBIOS local session number
  6671.         DS:SI buffer filled
  6672.         ES:DI buffer filled
  6673. Notes:    the local session number allows sharing the redirector's session number
  6674.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  6675.       to correctly recover from errors
  6676.     calls INT 2F/AX=111Eh with AX on top of the stack
  6677.     supported by DR-DOS 5.0
  6678. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  6679. --------O-215F05-----------------------------
  6680. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  6681.     AX = 5F05h
  6682.     DL = drive number (0=A:)
  6683.     DS:SI -> ASCIZ name of the object to map the drive to
  6684. Return: CF set on error
  6685.         AX = error code (see AH=59h)
  6686.     CF clear if successful
  6687. SeeAlso: AX=5F06h"STARLITE"
  6688. --------N-215F06-----------------------------
  6689. INT 21 U - Network - GET FULL REDIRECTION LIST
  6690.     AX = 5F06h
  6691.     ???
  6692. Return: ???
  6693. Notes:    similar to AX=5F02h and AX=5F05h, but also returns redirections
  6694.       excluded from those calls for various reasons
  6695.     calls INT 2F/AX=111Eh with AX on top of the stack
  6696. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  6697. --------O-215F06-----------------------------
  6698. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  6699.     AX = 5F06h
  6700.     DL = drive to be unmapped (0=A:)
  6701. Return: CF set on error
  6702.         AX = error code (see AH=59h)
  6703.     CF clear if successful
  6704. SeeAlso: AX=5F05h"STARLITE"
  6705. --------D-215F07-----------------------------
  6706. INT 21 - DOS 5+ - ENABLE DRIVE
  6707.     AX = 5F07h
  6708.     DL = drive number (0=A:)
  6709. Return: CF clear if successful
  6710.     CF set on error
  6711.         AX = error code (0Fh) (see AH=59h)
  6712. Note:    simply sets the "valid" bit in the drive's CDS
  6713. SeeAlso: AH=52h,AX=5F08h"DOS"
  6714. --------O-215F07-----------------------------
  6715. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  6716.     AX = 5F07h
  6717.     DS:SI -> ASCIZ name of object to offer to network
  6718.     ES:DI -> ASCIZ name under which object will be known on the network
  6719.         MUST begin with three slashes
  6720. Return: CF set on error
  6721.         AX = error code (see AH=59h)
  6722.     CF clear if successful
  6723. SeeAlso: AX=5F08h"STARLITE"
  6724. --------D-215F08-----------------------------
  6725. INT 21 - DOS 5+ - DISABLE DRIVE
  6726.     AX = 5F08h
  6727.     DL = drive number (0=A:)
  6728. Return: CF clear if successful
  6729.     CF set on error
  6730.         AX = error code (0Fh) (see AH=59h)
  6731. Note:    simply clears the "valid" bit in the drive's CDS
  6732. SeeAlso: AH=52h,AX=5F07h"DOS"
  6733. --------O-215F08-----------------------------
  6734. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  6735.     AX = 5F08h
  6736.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  6737. Return: CF set on error
  6738.         AX = error code (see AH=59h)
  6739.     CF clear if successful
  6740. SeeAlso: AX=5F07h"STARLITE"
  6741. --------O-215F09-----------------------------
  6742. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  6743.     AX = 5F09h
  6744.     DS:DX -> ASCIZ name of the device driver to attach to
  6745. Return: CF set on error
  6746.         AX = error code (see AH=59h)
  6747.     CF clear if successful
  6748. Note:    the STARLITE distributed file system can attach to multiple networks
  6749.       simultaneously
  6750. SeeAlso: AX=5F0Ah
  6751. --------O-215F0A-----------------------------
  6752. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  6753.     AX = 5F0Ah
  6754.     DS:DX -> ASCIZ name of device driver to detach from
  6755. Return: CF set on error
  6756.         AX = error code (see AH=59h)
  6757.     CF clear if successful
  6758. SeeAlso: AX=5F09h
  6759. --------N-215F30-----------------------------
  6760. INT 21 U - LAN Manager Enhanced DOS - ???
  6761.     AX = 5F30h
  6762.     ???
  6763. Return: ???
  6764. --------N-215F32-----------------------------
  6765. INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
  6766.     AX = 5F32h
  6767.     BX = handle
  6768.     CX = size of _PIPEINFO structure
  6769.     DX = level (must be 0001h)
  6770.     DS:SI -> _PIPEINFO structure (see below)
  6771. Return: CF clear if successful
  6772.         _PIPEINFO structure filled in
  6773.     CF set on error
  6774.         AX = error code
  6775. Note:    this function was introduced by LAN Manager but is also supported by
  6776.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6777.       Machines, and others
  6778. SeeAlso: AX=5F33h,AX=5F34h
  6779.  
  6780. Format of _PIPEINFO structure:
  6781. Offset    Size    Description
  6782.  00h    WORD    size of outgoing buffer
  6783.  02h    WORD    size of incoming buffer
  6784.  04h    BYTE    maximum number of instances allowed
  6785.  05h    BYTE    current number of instances
  6786.  06h    BYTE    length of the name (including terminating NUL)
  6787.  07h  N BYTEs    name
  6788. --------N-215F33-----------------------------
  6789. INT 21 u - Named Pipes - LOCAL DosQNmPHandState
  6790.     AX = 5F33h
  6791.     BX = handle
  6792. Return: CF clear if successful
  6793.         AH = pipe mode bit mask (see below)
  6794.         AL = maximum number of instances
  6795.     CF set on error
  6796.         AX = error code
  6797. Note:    this function was introduced by LAN Manager but is also supported by
  6798.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6799.       Machines, and others
  6800. SeeAlso: AX=5F32h,AX=5F34h
  6801.  
  6802. Bitfields for pipe mode:
  6803.  bit 7    set if nonblocking, clear if blocking
  6804.  bit 6    set if server end, clear if client end
  6805.  bit 2    set if write in message mode, clear if write in byte mode
  6806.  bit 0    set if read in message mode, clear if read in byte mode
  6807. --------N-215F34-----------------------------
  6808. INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
  6809.     AX = 5F34h
  6810.     BX = handle
  6811.     CX = pipe mode bit mask
  6812.         bit 15: set if nonblocking, clear if blocking
  6813.         bit  8: set if read in message mode, clear if read in byte mode
  6814. Return: CF clear if successful
  6815.     CF set if error
  6816.         AX = error code
  6817. Note:    this function was introduced by LAN Manager but is also supported by
  6818.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6819.       Machines, and others
  6820. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  6821. --------N-215F35-----------------------------
  6822. INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
  6823.     AX = 5F35h
  6824.     BX = handle
  6825.     CX = buffer length
  6826.     DS:SI -> buffer
  6827. Return: CF clear if successful
  6828.         CX = bytes read
  6829.         SI = bytes left in the pipe
  6830.         DX = bytes left in the current message
  6831.         DI = pipe status
  6832.         0001h disconnected
  6833.         0002h listening
  6834.         0003h connected
  6835.         0004h closing
  6836.     CF set if error
  6837.         AX = error code
  6838. Note:    this function was introduced by LAN Manager but is also supported by
  6839.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6840.       Machines, and others
  6841. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  6842. --------N-215F36-----------------------------
  6843. INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
  6844.     AX = 5F36h
  6845.     BX = handle
  6846.     CX = in buffer length
  6847.     DS:SI -> in buffer
  6848.     DX = out buffer length
  6849.     ES:DI -> out buffer
  6850. Return: CF clear if successful
  6851.         CX = bytes read
  6852.     CF set on error
  6853.         AX = error code
  6854. Note:    this function was introduced by LAN Manager but is also supported by
  6855.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6856.       Machines, and others
  6857. SeeAlso: AX=5F34h,AX=5F37h
  6858. --------N-215F37-----------------------------
  6859. INT 21 u - Named Pipes - DosCallNmPipe
  6860.     AX = 5F37h
  6861.     DS:SI -> DosCallNmPipe stack frame (see below)
  6862. Return: CF clear if successful
  6863.         CX = bytes read
  6864.     CF set on error
  6865.         AX = error code
  6866. Note:    this function was introduced by LAN Manager but is also supported by
  6867.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6868.       Machines, and others
  6869. SeeAlso: AX=5F36h,AX=5F38h
  6870.  
  6871. Format of DosCallNmPipe stack frame:
  6872. Offset    Size    Description
  6873.  00h    DWORD    timeout
  6874.  04h    DWORD    -> bytes read WORD (not used!!)
  6875.  08h    WORD    out buffer length
  6876.  0Ah    DWORD    address of out buffer
  6877.  0Eh    WORD    in buffer length
  6878.  10h    DWORD    address of in buffer
  6879.  14h    DWORD    address of pipe name
  6880. --------N-215F38-----------------------------
  6881. INT 21 u - Named Pipes - LOCAL DosWaitNmPipe
  6882.     AX = 5F38h
  6883.     DS:DX -> pipe name
  6884.     BX:CX = timeout value
  6885. Return: CF clear if successful
  6886.     CF set if error
  6887.         AX = error code
  6888. Note:    this function was introduced by LAN Manager but is also supported by
  6889.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6890.       Machines, and others
  6891. SeeAlso: AX=5F37h,AX=5F39h
  6892. --------N-215F39-----------------------------
  6893. INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
  6894.     AX = 5F39h
  6895.     BX = handle
  6896.     CX = buffer length
  6897.     DS:DX -> buffer
  6898. Return: CF clear if successful
  6899.         CX = bytes read
  6900.     CF set if error
  6901.         AX = error code
  6902. Notes:    this function was introduced by LAN Manager but is also supported by
  6903.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6904.       Machines, and others
  6905.     not documented in the LAN Manager Toolkit
  6906. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  6907. --------N-215F3A-----------------------------
  6908. INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
  6909.     AX = 5F3Ah
  6910.     BX = handle
  6911.     CX = buffer length
  6912.     DS:DX -> buffer
  6913. Return: CF clear if successful
  6914.         CX = bytes written
  6915.     CF set if error
  6916.         AX = error code
  6917. Notes:    this function was introduced by LAN Manager but is also supported by
  6918.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  6919.       Machines, and others
  6920.     not documented in the LAN Manager Toolkit
  6921. SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
  6922. --------N-215F3B-----------------------------
  6923. INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
  6924.     AX = 5F3Bh
  6925.     BX = handle
  6926.     CX = handle_info_1 structure length or sizeof DWORD
  6927.     DI = parameter number to set
  6928.         0000h all
  6929.         0001h number of milliseconds
  6930.         0002h number of characters
  6931.     DS:DX -> handle_info_1 structure (DI=0000h) (see below)
  6932.         or DWORD (DI=0001h or 0002h)
  6933.     SI = level of information (0001h)
  6934. Return: CF clear if successful
  6935.         CX = total bytes available
  6936.     CF set if error
  6937.         AX = error code
  6938. SeeAlso: AX=5F3Ch
  6939.  
  6940. Format of handle_info_1 structure:
  6941. Offset    Size    Description
  6942.  00h    DWORD    number of milliseconds which workstations collects data before
  6943.         it sends the data to the named pipe
  6944.  04h    DWORD    number of characters which workstations collects before it
  6945.         sends the data to the named pipe
  6946. --------N-215F3C-----------------------------
  6947. INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
  6948.     AX = 5F3Ch
  6949.     BX = handle
  6950.     CX = length of handle_info_1 structure
  6951.     DS:DX -> handle_info_1 structure (see AX=5F3Bh)
  6952.     SI = level of information (must be 0001h)
  6953. Return: CF clear if successful
  6954.         CX = total bytes available
  6955.     CF set if error
  6956.         AX = error code
  6957. SeeAlso: AX=5F3Bh
  6958. --------N-215F3D-----------------------------
  6959. INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
  6960.     AX = 5F3Dh
  6961.     ???
  6962. Return: ???
  6963. --------N-215F3E-----------------------------
  6964. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
  6965.     AX = 5F3Eh
  6966.     ???
  6967. Return: ???
  6968. Note:    This function is not documented anywhere in the LAN Manager 2.x Toolkit
  6969.       but was documented in LAN Manager 1.x manuals.
  6970. --------N-215F3F-----------------------------
  6971. INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
  6972.     AX = 5F3Fh
  6973.     CX = api number
  6974.     ES:DI -> data descriptor
  6975.     ES:SI -> parameter descriptor
  6976.     ES:DX -> auxiliary descriptor (if DX <> 0)
  6977.     ???
  6978. Return: ???
  6979. --------N-215F40-----------------------------
  6980. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
  6981.     AX = 5F40h
  6982.     DS:DX -> NetMessageBufferSend parameter structure (see below)
  6983. Return: AX = error code
  6984.  
  6985. Format of NetMessageBufferSend parameter structure:
  6986. Offset    Size    Description
  6987.  00h    DWORD    -> recipient name (name for specific user, name* for domain
  6988.              name wide, * for broadcast)
  6989.  04h    DWORD    -> buffer
  6990.  08h    WORD    length of buffer
  6991. --------N-215F41-----------------------------
  6992. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
  6993.     AX = 5F41h
  6994.     BL = level of detail (0000h, 0001h or 0002h)
  6995.     CX = buffer length
  6996.     ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
  6997.         (see below)
  6998. Return: CF clear if successful
  6999.         CX = entries read
  7000.         DX = total available
  7001.     CF set on error
  7002.         AX = error code
  7003.  
  7004. Format of service_info_0 structure:
  7005. Offset    Size    Description
  7006.  00h 16 BYTEs    name
  7007.  
  7008. Format of service_info_1 structure:
  7009. Offset    Size    Description
  7010.  00h 16 BYTEs    name
  7011.  10h    WORD    status bitmask (see below)
  7012.  12h    DWORD    status code (see below)
  7013.          (also see Microsoft LAN Manager Programmer's Reference)
  7014.  16h    WORD    process id
  7015.  
  7016. Format of service_info_2 structure:
  7017. Offset    Size    Description
  7018.  00h 16 BYTEs    name
  7019.  10h    WORD    status bitmask (see below)
  7020.  12h    DWORD    status code (see below)
  7021.  16h    WORD    process id
  7022.  18h 64 BYTEs    text
  7023.  
  7024. Bitfields for status bitmask:
  7025.  bits 0,1    00 uninstall
  7026.          01 install pending
  7027.         10 uninstall pending
  7028.         11 installed
  7029.  bits 2,3    00 active
  7030.          01 Continue pending
  7031.         10 Pause pending
  7032.         11 paused
  7033.  bit 4    uninstallable
  7034.  bit 5    pausable
  7035.  bit 8    disk redirector paused
  7036.  bit 9    spooled device redirector paused (printing)
  7037.  bit 10    communication device redirector paused
  7038.  
  7039. Values for status code:
  7040.  high word
  7041.     3051 Bad parameter value
  7042.     3052 A parameter is missing
  7043.     3053 An unknown parameter was specified
  7044.     3054 The resource is insufficient
  7045.     3055 Configuration is faulty
  7046.     3056 An MS-DOS or MS OS/2 error occured
  7047.     3057 An internal error occured
  7048.     3058 An ambiguous parameter name was given
  7049.     3059 A duplicate parameter exists
  7050.     3060 The service was terminated by NetSeviceControl when it did not respond
  7051.     3061 The service program file could not be executed
  7052.     3062 The subservice failed to start
  7053.     3063 There is a conflict in the value or use of these parameters
  7054.     3064 There is a problem with the file
  7055.  low word
  7056.     3070 There is insufficient memory
  7057.     3071 There is insufficeient disk space
  7058.     3072 Unable to create thread
  7059.     3073 Unable to create process
  7060.     3074 A security failure occured
  7061.     3075 There is bad or missing default path
  7062.     3076 Network software is not installed
  7063.     3077 Server software is not installed
  7064.     3078 The server could not access the UAS database
  7065.     3079 The action requires user-level security
  7066.     3080 The log directory is invalid
  7067.     3081 The LAN group specificed could not be used
  7068.     3082 The computername is being used as a message alias on another computer
  7069.     3083 The workstation failed to announce the servername
  7070.     3084 The user accounts system is not configured properly
  7071. --------N-215F42-----------------------------
  7072. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
  7073.     AX = 5F42h
  7074.     DH = opcode
  7075.         00h interrogate status
  7076.         01h pause
  7077.         02h continue
  7078.         03h uninstall
  7079.     DL = argument
  7080.         01h disk resource
  7081.         02h print resource
  7082.         04h communications resource (not implemented for DOS)
  7083.     ES:BX -> NetServiceControl parameter structure (see below)
  7084. Return: CF clear if successful
  7085.     CF set on error
  7086.         AX = error code
  7087.  
  7088. Format of NetServiceControl parameter structure:
  7089. Offset    Size    Description
  7090.  00h    DWORD    -> service name
  7091.  04h    WORD    result buffer size
  7092.  06h    DWORD    -> result buffer as service_info_2 structure
  7093. --------N-215F43-----------------------------
  7094. INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
  7095.     AX = 5F43h
  7096.     BX = handle of remote print job
  7097.     CX = size of PRIDINFO struture
  7098.     ES:DI -> PRIDINFO structure (see below)
  7099. Return: CF clear if successful
  7100.         PRIDINFO filled in
  7101.     CF set on error
  7102.         AX = error code
  7103.  
  7104. Format of PRIDINFO structure:
  7105. Offset    Size    Description
  7106.  00h    WORD    job id
  7107.  02h 16 BYTEs    server name
  7108.  12h 13 BYTEs    queue name
  7109.  1Fh  1 BYTE    pad
  7110. --------N-215F44-----------------------------
  7111. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
  7112.     AX = 5F44h
  7113.     BX = information level (00h, 01h, or 0Ah)
  7114.     CX = buffer size
  7115.     ES:DI = buffer in which to store info
  7116. Return: AX = error code
  7117.     DX = amount of buffer used (or required)
  7118. SeeAlso: AX=5F45h,AX=5F49h
  7119. --------N-215F45-----------------------------
  7120. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
  7121.     AX = 5F45h
  7122.     BX = level (0000h or 0001h)
  7123.     CX = buffer size
  7124.     DX = parameter to set
  7125.     ES:DI -> buffer
  7126. Return: CF clear if successful
  7127.     CF set if error
  7128.         AX = error code
  7129. SeeAlso: AX=5F44h
  7130. --------N-215F46-----------------------------
  7131. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
  7132.     AX = 5F46h
  7133.     BX = level (0000h or 0001h)
  7134.     CX = size of buffer
  7135.     ES:DI -> buffer of use_info_0 or use_info_1 structures (see below)
  7136. Return: CF clear if successful
  7137.         CX = entries read
  7138.         DX = total available entries
  7139.     CF set if error
  7140.         AX = error code
  7141. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  7142.         
  7143. Format of use_info_0 structure:
  7144. Offset    Size    Description
  7145.  00h  9 BYTEs    local device name
  7146.  09h    BYTE    padding
  7147.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  7148.  
  7149. Format of use_info_1 structure:
  7150. Offset    Size    Description
  7151.  00h  9 BYTEs    Local device name
  7152.  09h    BYTE    padding
  7153.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  7154.  0Eh    DWORD    -> password
  7155.  10h    WORD    ignored
  7156.  12h    WORD    use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
  7157.  14h    WORD    ignored
  7158.  16h    WORD    ignored
  7159. --------N-215F47-----------------------------
  7160. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
  7161.     AX = 5F47h
  7162.     BX = level (0001h)
  7163.     CX = size of use_info_1 structure
  7164.     ES:DI -> use_info_1 structure (see AX=5F46h)
  7165. Return: CF clear on success
  7166.     CF set on error
  7167.         AX = error code
  7168. SeeAlso: AX=5F46h,AX=5F48h
  7169. --------N-215F48-----------------------------
  7170. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
  7171.     AX = 5F48h
  7172.     BX = force level
  7173.         0000h no force        
  7174.         0001h force
  7175.         0002h lots of force
  7176.     ES:DI -> buffer as either the local device name or UNC remote name
  7177. Return: CF clear on success
  7178.     CF set on error
  7179.         AX = error code
  7180. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  7181. --------N-215F49-----------------------------
  7182. INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
  7183.     AX = 5F49h
  7184.     DS:DX -> NetUseGetInfo parameter structure
  7185. Return: CF clear on success
  7186.         DX = total available
  7187.     CF set on error
  7188.         AX = error code
  7189. SeeAlso: AX=5F44h,AX=5F47h
  7190.  
  7191. Format of NetUseGetInfo parameter structure:
  7192. Offset    Size    Description
  7193.  00h    DWORD    pointer to either the local device name or UNC remote name
  7194.  04h    WORD    level of information (0000h or 0001h)
  7195.  06h    DWORD    pointer to buffer of use_info_0 or use_info_1 structures
  7196.  0Ah    WORD    length of buffer
  7197. --------N-215F4A-----------------------------
  7198. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
  7199.     AX = 5F4Ah
  7200.     DS:DX -> NetRemoteCopy parameter structure
  7201. Return: CF clear if successful
  7202.     CF set on error
  7203.         AX = error code
  7204. SeeAlso: AX=5F4Bh
  7205.  
  7206. Format of NetRemoteCopy parameter structure:
  7207. Offset    Size    Description
  7208.  00h    DWORD    -> source name as UNC
  7209.  04h    DWORD    -> destination name as UNC
  7210.  08h    DWORD    -> source password
  7211.  0Ch    DWORD    -> destination password
  7212.  10h    WORD    destination open bitmap
  7213.         if destination path exists
  7214.             0000h open fails
  7215.             0001h file is appended
  7216.             0002h file is overwritten
  7217.         if destination path doesn't exist
  7218.             0000h open fails
  7219.             0010h file is created
  7220.  12h    WORD    copy control bitmap (see below)
  7221.  14h    DWORD    -> copy_info buffer
  7222.  18h    WORD    length of copy_info buffer
  7223.  
  7224. Bitfields for copy control:
  7225.  bit 0    destination must be a file
  7226.  bit 1    destination must be a directory
  7227.  bit 2    destination is opened in ascii mode instead of binary
  7228.  bit 3    source is opened in ascii mode instead of binary
  7229.  bit 4    verify all write operations
  7230. --------N-215F4B-----------------------------
  7231. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
  7232.     AX = 5F4Bh
  7233.     DS:DX -> NetRemoteMove parameter structure
  7234. Return: CF clear if successful
  7235.     CF set on error
  7236.         AX = error code
  7237. SeeAlso: AX=5F4Ah
  7238.  
  7239. Format of NetRemoteMove parameter structure:
  7240. Offset    Size    Description
  7241.  00h    DWORD    -> source name as UNC
  7242.  04h    DWORD    -> destination name as UNC
  7243.  08h    DWORD    -> source password
  7244.  0Ch    DWORD    -> destination password
  7245.  10h    WORD    destination open bitmap
  7246.         if destination path exists
  7247.             0000h open fails
  7248.             0001h file is appended
  7249.             0002h file is overwritten
  7250.         if destination path doesn't exist
  7251.             0000h open fails
  7252.             0010h file is created
  7253.  12h    WORD    move control bitmap
  7254.             0001h destination must be a file
  7255.             0002h destination must be a directory
  7256.  14h    DWORD    -> move_info buffer
  7257.  18h    WORD    length of move_info buffer
  7258. --------N-215F4C-----------------------------
  7259. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
  7260.     AX = 5F4Ch
  7261.     BX = level (0000h or 0001h)
  7262.     CX = buffer length
  7263.     ES:DI -> buffer in which to store information
  7264. Return: CF clear if successful
  7265.         ES:DI -> server_info_X structures (depending on level) (see below)
  7266.         BX = entries read
  7267.         CX = total entries available
  7268.     CF set on error
  7269.         AX = error code
  7270. Notes:    this function is also supported by the Novell DOS Named Pipe Extender
  7271.     this function has been obseleted by NetServerEnum2          
  7272. SeeAlso: AX=5F53h
  7273.  
  7274. Format of server_info_0 structure:
  7275. Offset    Size    Description
  7276.  00h 16 BYTEs    name
  7277.  
  7278. Format of server_info_1 structure:
  7279. Offset    Size    Description
  7280.  00h 16 BYTEs    name
  7281.  10h    BYTE    major version in lower nibble             
  7282.  11h    BYTE    minor version
  7283.  12h    DWORD    server type bitmask (see below)
  7284.  16h    DWORD    -> comment string
  7285.  
  7286. Bitfields for server type:
  7287.  bit 0    workstation
  7288.  bit 1    server
  7289.  bit 2    SQL server
  7290.  bit 3    primary domain controller
  7291.  bit 4    backup domain controller
  7292.  bit 5    time server
  7293.  bit 6    Apple File Protocol (AFP) server
  7294.  bit 7    Novell server
  7295.  bit 8    Domain Member (v2.1+)
  7296.  bit 9    Print Queue server (v2.1+)
  7297.  bit 10    Dialin server (v2.1+)
  7298.  bit 11    Unix server (v2.1+)
  7299. --------N-215F4D-----------------------------
  7300. INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
  7301.     AX = 5F4Dh
  7302.     BX = message size
  7303.     CX = mailslot size (must be bigger than message size by at least 1)
  7304.                (minimum 1000h, maximum FFF6h)
  7305.                (buffer must be 9 bytes bigger than this)
  7306.     DS:SI -> name
  7307.     ES:DI -> memory buffer
  7308. Return: CF clear if successful
  7309.         AX = handle
  7310.     CF set on error
  7311.         AX = error code
  7312. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  7313. --------N-215F4E-----------------------------
  7314. INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
  7315.     AX = 5F4Eh
  7316.     BX = handle
  7317. Return: CF clear if successful
  7318.         ES:DI -> memory to be freed (allocated during DosMakeMailslot)
  7319.     CF set on error
  7320.         AX = error code
  7321. SeeAlso: AX=5F4Dh,AX=5F4Fh
  7322. --------N-215F4F-----------------------------
  7323. INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
  7324.     AX = 5F4Fh
  7325.     BX = handle
  7326. Return: CF clear if successful
  7327.         AX = max message size
  7328.         BX = mailslot size
  7329.         CX = next message size
  7330.         DX = next message priority
  7331.         SI = number of messages waiting
  7332.     CF set on error
  7333.         AX = error code
  7334. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  7335. --------N-215F50-----------------------------
  7336. INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
  7337.     AX = 5F50h
  7338.     BX = handle
  7339.     DX:CX = timeout
  7340.     ES:DI -> buffer
  7341. Return: CF clear if successful
  7342.         AX = bytes read
  7343.         CX = next item's size
  7344.         DX = next item's priority
  7345.     CF set on error
  7346.         AX = error code
  7347. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  7348. --------N-215F51-----------------------------
  7349. INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
  7350.     AX = 5F51h
  7351.     BX = handle
  7352.     ES:DI -> buffer
  7353. Return: CF clear if successful
  7354.         AX = bytes read
  7355.         CX = next item's size
  7356.         DX = next item's priority
  7357.     CF set on error
  7358.         AX = error code
  7359. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  7360. --------N-215F52-----------------------------
  7361. INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
  7362.     AX = 5F52h
  7363.     BX = class
  7364.     CX = length of buffer
  7365.     DX = priority
  7366.     ES:DI -> DosWriteMailslot parameter structure (see below)
  7367.     DS:SI -> mailslot name
  7368. Return: CF clear if successful
  7369.     CF set on error
  7370.         AX = error code
  7371. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  7372.  
  7373. Format of DosWriteMailslot parameter structure:
  7374. Offset    Size    Description
  7375.  00h    DWORD    timeout
  7376.  04h    DWORD    -> buffer
  7377. --------N-215F53-----------------------------
  7378. INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
  7379.     AX = 5F53h
  7380.     DS:SI -> NetServerEnum2 parameter structure (see below)
  7381. Return: CF clear if successful
  7382.         BX = entries read
  7383.         CX = total entries available
  7384.     CF set on error
  7385.         AX = error code
  7386. SeeAlso: AX=5F4Ch
  7387.         
  7388. Format of NetServerEnum2 parameter structure:
  7389. Offset    Size    Description
  7390.  00h    WORD    level (0000h or 0001h)
  7391.  02h    DWORD    -> buffer as array of server_info_??? structures
  7392.  06h    WORD    length of buffer
  7393.  08h    DWORD    server type bitmask (see below)
  7394.  0Ch    DWORD    -> Domain name (may be 0000h:0000h for all local domains)
  7395.  
  7396. Bitfields for server type:
  7397.  bit 0    workstation
  7398.  bit 1    server
  7399.  bit 2    SQL server
  7400.  bit 3    primary domain controller
  7401.  bit 4    backup domain controller
  7402.  bit 5    time server
  7403.  bit 6    Apple File Protocol (AFP) server
  7404.  bit 7    Novell server
  7405.  bit 8    Domain Member (v2.1+)
  7406.  bit 9    Print Queue server (v2.1+)
  7407.  bit 10    Dialin server (v2.1+)
  7408.  bit 11    Unix server (v2.1+)
  7409. Note:    set all bits (FFFFFFFFh) for All Types
  7410.  
  7411. Format of server_info_0 structure:
  7412. Offset    Size    Description
  7413.  00h 16 BYTEs    name
  7414.  
  7415. Format of server_info_1 structure:
  7416. Offset    Size    Description
  7417.  00h 16 BYTEs    name
  7418.  10h    BYTE    major version in lower nibble             
  7419.  11h    BYTE    minor version
  7420.  12h    DWORD    server type (bits 0-11) (see above)
  7421.  16h    DWORD    -> comment string
  7422. --------N-215F55----------------------------
  7423. INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
  7424.     AX = 5F55h
  7425.     BX = ???
  7426. Return: CF clear if successful
  7427.     CF set on error
  7428.         AX = error code
  7429. --------N-215F80-----------------------------
  7430. INT 21 - LANtastic - GET LOGIN ENTRY
  7431.     AX = 5F80h
  7432.     BX = login entry index (0-based)
  7433.     ES:DI -> 16-byte buffer for machine name
  7434. Return: CF clear if successful
  7435.         buffer filled with machine name ("\\" prefix removed)
  7436.         DL = adapter number (v3+)
  7437.     CF set on error
  7438.         AX = error code
  7439. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  7440. SeeAlso: AX=5F83h
  7441. --------N-215F81-----------------------------
  7442. INT 21 - LANtastic - LOGIN TO SERVER
  7443.     AX = 5F81h
  7444.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  7445.     BL = adapter number
  7446.         FFh try all valid adapters
  7447.         00h-07h try only specified adapter
  7448. Return: CF clear if successful
  7449.     CF set on error
  7450.         AX = error code
  7451. Notes:    login path is of form "\\machine\username"
  7452.     if no password is used, the string at ES:DI must be terminated with
  7453.       three NULs for compatibility with LANtastic v3.0.
  7454. SeeAlso: AX=5F82h,AX=5F84h
  7455. --------N-215F82-----------------------------
  7456. INT 21 - LANtastic - LOGOUT FROM SERVER
  7457.     AX = 5F82h
  7458.     ES:DI -> ASCIZ server name (in form "\\machine")
  7459. Return: CF clear if successful
  7460.     CF set on error
  7461.         AX = error code
  7462. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  7463. --------N-215F83-----------------------------
  7464. INT 21 - LANtastic - GET USERNAME ENTRY
  7465.     AX = 5F83h
  7466.     BX = login entry index (0-based)
  7467.     ES:DI -> 16-byte buffer for username currently logged into
  7468. Return: CF clear if successful
  7469.         DL = adapter number (v3+)
  7470.     CF set on error
  7471.         AX = error code
  7472. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  7473. SeeAlso: AX=5F80h
  7474. --------N-215F84-----------------------------
  7475. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  7476.     AX = 5F84h
  7477.     BX = server index not currently logged into
  7478.     ES:DI -> 16-byte buffer for server name which is available for logging
  7479.         in to ("\\" prefix omitted)
  7480. Return: CF clear if successful
  7481.         DL = adapter number to non-logged in server is on
  7482.     CF set on error
  7483.         AX = error code
  7484. SeeAlso: AX=5F81h
  7485. --------N-215F85-----------------------------
  7486. INT 21 - LANtastic - CHANGE PASSWORD
  7487.     AX = 5F85h
  7488.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  7489. Return: CF clear if successful
  7490.     CF set on error
  7491.         AX = error code
  7492. Notes:    must be logged into the named machine
  7493.     this function is illegal for group accounts
  7494. --------N-215F86-----------------------------
  7495. INT 21 - LANtastic - DISABLE ACCOUNT
  7496.     AX = 5F86h
  7497.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  7498. Return: CF clear if successful
  7499.     CF set on error
  7500.         AX = error code
  7501. Note:    must be logged into the named machine and concurrent logins set to 1
  7502.       by NET_MGR.  Requires system manager to re-enable account.
  7503. --------N-215F87-----------------------------
  7504. INT 21 - LANtastic v3+ - GET ACCOUNT
  7505.     AX = 5F87h
  7506.     DS:SI -> 128-byte buffer for account information (see below)
  7507.     ES:DI -> ASCIZ machine name in form "\\machine"
  7508. Return:    CF clear if successful
  7509.     CF set on error
  7510.         AX = error code
  7511.     BX destroyed
  7512. Note:    must be logged into the specified machine
  7513.  
  7514. Format of user account structure:
  7515. Offset    Size    Description
  7516.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  7517.  10h 16 BYTEs    reserved (00h)
  7518.  20h 32 BYTEs    user description
  7519.  40h    BYTE    privilege bits (see below)
  7520.  41h    BYTE    maximum concurrent users
  7521.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  7522.         (bit set if half-hour not an allowed time)
  7523.  6Ch    WORD    internal (0002h)
  7524.  6Eh  2 WORDs    last login time
  7525.  72h  2 WORDs    account expiration date (MS-DOS-format year/month:day)
  7526.  76h  2 WORDs    password expiration date (0 = none)
  7527.  7Ah    BYTE    number of days to extend password after change (1-31)
  7528.         00h if no extension required
  7529. ---v3.x---
  7530.  7Bh  5 BYTEs    reserved
  7531. ---v4.x---
  7532.  7Bh    BYTE    storage for first letter of user name when deleted (first
  7533.         character is changed to 00h when deleting account)
  7534.  7Ch    BYTE    extended privileges
  7535.  7Dh  3 BYTEs    reserved
  7536.  
  7537. Bitfields for privilege bits:
  7538.  bit 7    bypass access control lists
  7539.  bit 6    bypass queue protection
  7540.  bit 5    treat as local process
  7541.  bit 4    bypass mail protection
  7542.  bit 3    allow audit entry creation
  7543.  bit 2    system manager
  7544.  bit 0    user cannot change password
  7545. --------N-215F88-----------------------------
  7546. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  7547.     AX = 5F88h
  7548. Return:    CF clear if successful
  7549.     CF set on error
  7550.         AX = error code
  7551. SeeAlso: AX=5F82h
  7552. --------N-215F97-----------------------------
  7553. INT 21 - LANtastic - COPY FILE
  7554.     AX = 5F97h
  7555.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  7556.     SI = source file handle
  7557.     DI = destination file handle
  7558. Return: CF clear if successful
  7559.         DX:AX = number of bytes copied
  7560.     CF set on error
  7561.         AX = error code
  7562. Note:    copy is performed by server
  7563. --------N-215F98-----------------------------
  7564. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  7565.     AX = 5F98h
  7566.     DS:SI -> message buffer (see below)
  7567. Return: CF clear if successful
  7568.     CF set on error
  7569.         AX = error code
  7570. Note:    v4.1- return no errors
  7571. SeeAlso: AX=5F99h
  7572.  
  7573. Format of message buffer:
  7574. Offset    Size    Description
  7575.  00h    BYTE    reserved
  7576.  01h    BYTE    message type
  7577.         00h general 
  7578.         01h server warning
  7579.         02h-7Fh reserved
  7580.         80h-FFh user-defined
  7581.  02h 16 BYTEs    ASCIZ destination machine name
  7582.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  7583.  22h 16 BYTEs    ASCIZ user name
  7584.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  7585.  42h 80 BYTEs    message text
  7586. --------N-215F99-----------------------------
  7587. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  7588.     AX = 5F99h
  7589.     ES:DI -> messsage buffer (see AX=5F98h for format)
  7590. Return: CF clear if successful
  7591.     CF set on error
  7592.         AX = error code
  7593. SeeAlso: AX=5F98h
  7594. --------N-215F9A-----------------------------
  7595. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  7596.     AX = 5F9Ah
  7597. Return: CF clear if successful
  7598.         DL = bits describing processing for received unsolicited messages
  7599.         bit 0: beep before message is delivered
  7600.         bit 1: deliver message to message service
  7601.         bit 2: pop up message automatically (v3+)
  7602.     CF set on error
  7603.         AX = error code
  7604. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  7605. --------N-215F9B-----------------------------
  7606. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
  7607.     AX = 5F9Bh
  7608.     DL = bits describing processing for received unsolicited messages
  7609.          (see AX=5F9Ah)
  7610. Return: CF clear if successful
  7611.     CF set on error
  7612.         AX = error code
  7613. SeeAlso: AX=5F9Ah,AX=5F9Eh
  7614. --------N-215F9C-----------------------------
  7615. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  7616.     AX = 5F9Ch
  7617.     CX = time to leave on screen in clock ticks
  7618.     DH = 0-based screen line on which to place message
  7619. Return:    CF clear if successful
  7620.     CF set on error
  7621.         AX = error code (0Bh)
  7622. Notes:    the original screen contents are restored when the message is removed
  7623.     the message will not appear, and an error will be returned, if the
  7624.       screen is in a graphics mode
  7625. SeeAlso: AX=5F9Ah
  7626. --------N-215F9D-----------------------------
  7627. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  7628.     AX = 5F9Dh
  7629. Return:    DL = redirector control bits
  7630.         bit 7: set to notify on print job completion
  7631. SeeAlso: AX=5F9Ah,AX=5F9Eh
  7632. --------N-215F9E-----------------------------
  7633. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  7634.     AX = 5F9Eh
  7635.     DL = redirector control bits (see AH = 5F9Dh)
  7636. Return: nothing
  7637. SeeAlso: AX=5F9Bh,AX=5F9Dh
  7638. --------N-215FA0-----------------------------
  7639. INT 21 - LANtastic - GET QUEUE ENTRY
  7640.     AX = 5FA0h
  7641.     BX = queue entry index (0000h is first entry)
  7642.     DS:SI -> buffer for queue entry (see below)
  7643.     ES:DI -> ASCIZ server name in form "\\name"
  7644. Return: CF clear if successful
  7645.     CF set on error
  7646.         AX = error code
  7647.     BX = entry index for next queue entry (BX-1 is current index)
  7648. SeeAlso: AX=5FA1h,AX=5FA2h
  7649.  
  7650. Values for status of entry:
  7651.  00h empty
  7652.  01h being updated
  7653.  02h being held
  7654.  03h waiting for despool
  7655.  04h being despooled
  7656.  05h canceled
  7657.  06h spooled file could not be accessed
  7658.  07h destination could not be accessed
  7659.  08h rush job
  7660.  
  7661. Values for type of entry:
  7662.  00h printer queue file
  7663.  01h message
  7664.  02h local file
  7665.  03h remote file
  7666.  04h to remote modem
  7667.  05h batch processor file
  7668.  
  7669. Format of queue entry:
  7670. Offset    Size    Description
  7671.  00h    BYTE    status of entry (see above)
  7672.  01h    DWORD    size of spooled file
  7673.  05h    BYTE    type of entry (see above)
  7674.  06h    BYTE    output control
  7675.         bit 6: don't delete (for mail)
  7676.         bit 5: mail file contains voice mail (v3+)
  7677.         bit 4: mail message has been read
  7678.         bit 3: response has been requested for this mail
  7679.  07h    WORD    number of copies
  7680.  09h    DWORD    sequence number of queue entry
  7681.  0Dh 48 BYTEs    pathname of spooled file
  7682.  3Dh 16 BYTEs    user who spooled file
  7683.  4Dh 16 BYTEs    name of machine from which file was spooled
  7684.  5Dh    WORD    date file was spooled (see AX=5700h)
  7685.  5Fh    WORD    time file was spooled (see AX=5700h)
  7686.  61h 17 BYTEs    ASCIZ destination device or user name
  7687.  72h 48 BYTEs    comment field
  7688. --------N-215FA1-----------------------------
  7689. INT 21 - LANtastic - SET QUEUE ENTRY
  7690.     AX = 5FA1h
  7691.     BX = handle of opened queue entry
  7692.     DS:SI -> queue entry (see AX=5FA0h)
  7693. Return: CF clear if successful
  7694.     CF set on error
  7695.         AX = error code
  7696. Notes:    the only queue entry fields which may be changed are output control,
  7697.       number of copies, destination device, and comment
  7698.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  7699.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  7700.       printer queue entries)
  7701. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  7702. --------N-215FA2-----------------------------
  7703. INT 21 - LANtastic - CONTROL QUEUE
  7704.     AX = 5FA2h
  7705.     BL = control command
  7706.         00h start despooling (privileged)
  7707.         01h halt despooling (privileged)
  7708.         02h halt despooling at end of job (privileged)
  7709.         03h pause despooler at end of job (privileged)
  7710.         04h print single job (privileged)
  7711.         05h restart current job (privileged)
  7712.         06h cancel the current job
  7713.         07h hold queue entry
  7714.         08h release a held queue entry
  7715.         09h make queue entry a rushed job (privileged)
  7716.     CX:DX = sequence number to control (commands 06h-09h)
  7717.     DX = physical printer number (commands 00h-05h)
  7718.         00h-02h LPT1-LPT3
  7719.         03h,04h COM1,COM2
  7720.         other    all printers
  7721.     ES:DI -> ASCIZ server name in form "\\machine"
  7722. Return: CF clear if successful
  7723.     CF set on error
  7724.         AX = error code
  7725. --------N-215FA3-----------------------------
  7726. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  7727.     AX = 5FA3h
  7728.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  7729.     DS:SI -> buffer for printer status (see below)
  7730.     ES:DI -> ASCIZ server name in form "\\machine"
  7731. Return: CF clear if successful
  7732.     CF set on error
  7733.         AX = error code
  7734.     BX = next physical printer number
  7735. Note:    you must be logged in to the specified server
  7736.  
  7737. Format of printer status:
  7738. Offset    Size    Description
  7739.  00h    BYTE    printer state
  7740.         bit 7: printer paused
  7741.         bits 0-6: 0 printer disabled
  7742.               1 will stop at end of job
  7743.               2 print multiple jobs
  7744.  01h    WORD    queue index of print job being despooled
  7745.         FFFFh if not despooling--ignore all following fields
  7746.  03h    WORD    actual characters per second being output
  7747.  05h    DWORD    number of characters actually output so far
  7748.  09h    DWORD    number of bytes read from spooled file so far
  7749.  0Dh    WORD    copies remaining to print
  7750. --------N-215FA4-----------------------------
  7751. INT 21 - LANtastic v3+ - GET STREAM INFO
  7752.     AX = 5FA4h
  7753.     BX = 0-based stream index number
  7754.     DS:SI -> buffer for stream information (see below)
  7755.     ES:DI -> ASCIZ machine name in form "\\machine"
  7756. Return: CF clear if successful
  7757.     CF set on error
  7758.         AX = error code
  7759.     BX = next stream number
  7760. SeeAlso: AX=5FA5h
  7761.  
  7762. Format of stream information:
  7763. Offset    Size    Description
  7764.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  7765.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  7766. --------N-215FA5-----------------------------
  7767. INT 21 - LANtastic v3+ - SET STREAM INFO
  7768.     AX = 5FA5h
  7769.     BX = 0-based stream index number
  7770.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  7771.     ES:DI -> ASCIZ machine name in form "\\machine"
  7772. Return: CF clear if successful
  7773.     CF set on error
  7774.         AX = error code
  7775. SeeAlso: AX=5FA4h
  7776. --------N-215FA7-----------------------------
  7777. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  7778.     AX = 5FA7h
  7779.     DS:DX -> ASCIZ reason code (max 8 bytes)
  7780.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  7781.     ES:DI -> ASCIZ machine name in form "\\machine"
  7782. Return: CF clear if successful
  7783.     CF set on error
  7784.         AX = error code
  7785. Note:    you must be logged in to the specified server and have the "U"
  7786.       privilege to execute this call
  7787. --------N-215FA9-----------------------------
  7788. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  7789.     AX = 5FA9h
  7790.     BX = handle of opened queue entry
  7791.     DS:SI -> queue entry (see AX=5FA0h)
  7792. Return: CF clear if successful
  7793.     CF set on error
  7794.         AX = error code
  7795. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  7796.       also set.  This call supports    direct despooling.
  7797. SeeAlso: AX=5FA1h
  7798. --------N-215FB0-----------------------------
  7799. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  7800.     AX = 5FB0h
  7801.     BX = server login entry index
  7802.     DS:SI -> buffer for active user entry (see below)
  7803.     ES:DI -> ASCIZ machine name in form "\\server"
  7804. Return: CF clear if successful
  7805.     CF set on error
  7806.         AX = error code
  7807.     BX = next login index
  7808. SeeAlso: AX=5FB2h
  7809.  
  7810. Format of active user entry:
  7811. Offset    Size    Description
  7812.  00h    WORD    virtual circuit number
  7813.  02h    BYTE    login state (see below)
  7814.  03h    BYTE    last command issued (see below)
  7815.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  7816.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  7817.  0Ch 16 BYTEs    name of user who is logged in
  7818.  1Ch 16 BYTEs    name of remote logged in machine
  7819.  2Ch    BYTE    extended privileges (v4+???)
  7820.         bit 0: user cannot change his password
  7821.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  7822.  
  7823. Bitfields for login state:
  7824.  bit 0    fully logged in
  7825.  bit 1    remote program load login
  7826.  bit 2    user has system manager privileges
  7827.  bit 3    user can create audit entries
  7828.  bit 4    bypass mail protection
  7829.  bit 5    treat as local process
  7830.  bit 6    bypass queue protection
  7831.  bit 7    bypass access control lists
  7832.  
  7833. Values for last command:
  7834.  00h    login
  7835.  01h    process termination
  7836.  02h    open file
  7837.  03h    close file
  7838.  04h    create file
  7839.  05h    create new file
  7840.  06h    create unique file
  7841.  07h    commit data to disk
  7842.  08h    read file
  7843.  09h    write file
  7844.  0Ah    delete file
  7845.  0Bh    set file attributes
  7846.  0Ch    lock byte range
  7847.  0Dh    unlock byte range
  7848.  0Eh    create subdirectory
  7849.  0Fh    remove subdirectory
  7850.  10h    rename file
  7851.  11h    find first matching file
  7852.  12h    find next matching file
  7853.  13h    get disk free space
  7854.  14h    get a queue entry
  7855.  15h    set a queue entry
  7856.  16h    control the queue
  7857.  17h    return login information
  7858.  18h    return link description
  7859.  19h    seek on file
  7860.  1Ah    get server's time
  7861.  1Bh    create audit entry
  7862.  1Ch    open file in multitude of modes
  7863.  1Dh    change password
  7864.  1Eh    disable account
  7865.  1Fh    local server file copy
  7866. ---v3+---
  7867.  20h    get username from account file
  7868.  21h    translate server's logical path
  7869.  22h    make indirect file
  7870.  23h    get indirect file contents
  7871.  24h    get physical printer status
  7872.  25h    get logical print stream info
  7873.  26h    set logical print stream info
  7874.  27h    get user's account record
  7875. ---v4+---
  7876.  28h    request server shutdown
  7877.  29h    cancel server shutdown
  7878.  2Ah    stuff server's keyboard
  7879.  2Bh    write then commit data to disk
  7880.  2Ch    set extended queue entry
  7881.  2Dh    terminate user from server
  7882.  2Eh    enable/disable logins
  7883.  2Fh    flush server caches
  7884.  30h    change username
  7885.  31h    get extended queue entry
  7886.     (same as get queue, but can return named fields blanked)
  7887. --------N-215FB1-----------------------------
  7888. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  7889.     AX = 5FB1h
  7890.     DS:SI -> 64-byte buffer for link description
  7891.     ES:DI -> ASCIZ machine and shared directory name in form
  7892.          "\\machine\shared-resource"
  7893. Return: CF clear if successful
  7894.         CX = access control list privileges for requesting user (see below)
  7895.     CF set on error
  7896.         AX = error code
  7897.  
  7898. Bitfields for access control list:
  7899.  bit 4    (I) allow expansion of indirect files
  7900.  bit 5    (A) allow attribute changing
  7901.  bit 6    (P) allow physical access to device
  7902.  bit 7    (E) allow program execution
  7903.  bit 8    (N) allow file renaming
  7904.  bit 9    (K) allow directory deletion
  7905.  bit 10    (D) allow file deletion
  7906.  bit 11    (L) allow file/directory lookups
  7907.  bit 12    (M) allow directory creation
  7908.  bit 13    (C) allow file creation
  7909.  bit 14    (W) allow open for write and writing
  7910.  bit 15    (R) allow open for read and reading
  7911. --------N-215FB2-----------------------------
  7912. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  7913.     AX = 5FB2h
  7914.     BX = username entry index (0 for first)
  7915.     DS:SI -> 16-byte buffer for username
  7916.     ES:DI -> ASCIZ server name in form "\\machine"
  7917. Return: CF clear if successful
  7918.     CF set on error
  7919.         AX = error code
  7920.     BX = next queue entry index
  7921. SeeAlso: AX=5FB0h
  7922. --------N-215FB3-----------------------------
  7923. INT 21 - LANtastic v3+ - TRANSLATE PATH
  7924.     AX = 5FB3h
  7925.     DS:SI -> 128-byte buffer for ASCIZ result
  7926.     ES:DI -> full ASCIZ path, including server name
  7927.     DX = types of translation to be performed
  7928.         bit 0: expand last component as indirect file
  7929.         bit 1: return actual path relative to server's physical disk
  7930. Return: CF clear if successful
  7931.     CF set on error
  7932.         AX = error code
  7933. Note:    always expands any indirect files along the path
  7934. SeeALso: AX=5FB4h,INT 21/AH=60h
  7935. --------N-215FB4-----------------------------
  7936. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  7937.     AX = 5FB4h
  7938.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  7939.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  7940. Return: CF clear if successful
  7941.     CF set on error
  7942.         AX = error code
  7943. Note:    the contents of the indirect file may be any valid server-relative path
  7944. SeeAlso: AX=5FB3h,AX=5FB5h
  7945. --------N-215FB5-----------------------------
  7946. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  7947.     AX = 5FB5h
  7948.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  7949.     ES:DI -> full ASCIZ path of indirect file
  7950. Return: CF clear if successful
  7951.     CF set on error
  7952.         AX = error code
  7953. SeeAlso: AX=5FB4h
  7954. --------N-215FB6-----------------------------
  7955. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  7956.     AX = 5FB6h
  7957.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  7958.         ASCIZ password
  7959.     BL = adapter number to use for default login attempt
  7960.         FFh try all valid adapters
  7961.         00h-05h try adapter 0-5 explicitly
  7962. Return: CF clear if successful
  7963.     CF set on error
  7964.         AX = error code
  7965. Notes:    call with ES:DI -> two nulls to disable auto-login
  7966. SeeAlso: AX=5FB7h
  7967. --------N-215FB7-----------------------------
  7968. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  7969.     AX = 5FB7h
  7970.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  7971. Return: CF clear if successful
  7972.         DL = adapter number used for default login attempt
  7973.         FFh all valid adapters will be tried
  7974.         00h-05h specified adapter will be tried explicitly
  7975.     CF set on error
  7976.         AX = error code
  7977. SeeAlso: AX=5F81h,AX=5FB6h
  7978. --------N-215FC0-----------------------------
  7979. INT 21 - LANtastic - GET TIME FROM SERVER
  7980.     AX = 5FC0h
  7981.     DS:SI -> time block (see below)
  7982.     ES:DI -> ASCIZ server name to get time from
  7983. Return: CF clear if successful
  7984.     CF set on error
  7985.         AX = error code
  7986. SeeAlso: AH=E7h
  7987.  
  7988. Format of time block:
  7989. Offset    Size    Description
  7990.  00h    WORD    year
  7991.  02h    BYTE    day
  7992.  03h    BYTE    month
  7993.  04h    BYTE    minutes
  7994.  05h    BYTE    hour
  7995.  06h    BYTE    hundredths of second
  7996.  07h    BYTE    second
  7997. --------N-215FC8-----------------------------
  7998. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  7999.     AX = 5FC8h
  8000.     ES:DI -> ASCIZ server name in form "\\machine"
  8001.     DS:SI -> ASCIZ reason string (80 characters)
  8002.     CX = number of minutes until shutdown (0 = immediate)
  8003.     DX = option flags (see below)
  8004. Return: CF clear if successful
  8005.     CF set on error
  8006.         AX = error code
  8007. SeeAlso: AH=5FC9h
  8008.  
  8009. Bitfields for option flags:
  8010.  bit 0    auto reboot
  8011.  bit 1    do not notify users
  8012.  bit 2    halt after shutdown
  8013.  bit 3    shutdown due to power fail (used by UPS)
  8014.  bits 4-7    reserved
  8015.  bits 8-14    user definable
  8016.  bit 15 reserved
  8017. --------N-215FC9-----------------------------
  8018. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  8019.     AX = 5FC9h
  8020.     ES:DI -> ASCIZ server name in form "\\machine"
  8021. Return: CF clear if successful
  8022.     CF set on error
  8023.         AX = error code
  8024. Note:    you must have the "S" privilege to use this call
  8025. SeeAlso: AH=5FC8h
  8026. --------N-215FCA-----------------------------
  8027. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  8028.     AX = 5FCAh
  8029.     ES:DI -> ASCIZ server name in form "\\machine"
  8030.     DS:SI -> ASCIZ string to stuff (128 bytes)
  8031. Return: CF clear if successful
  8032.     CF set on error
  8033.         AX = error code
  8034. Note:    you must have the "S" privilege to use this call
  8035.     maximum number of characters that can be stuffed is determined by the
  8036.       server's RUN BUFFER SIZE.
  8037. SeeAlso: INT 16/AH=05h
  8038. --------N-215FCB-----------------------------
  8039. INT 21 - LANtastic v4.1+ - TERMINATE USER
  8040.     AX = 5FCBh
  8041.     ES:DI -> ASCIZ server name in form "\\machine"
  8042.     DS:SI -> blank-padded username.     A null char = wildcard.
  8043.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  8044.     CX = minutes until termination (0 = immediate)
  8045. Return: CF clear if successful
  8046.     CF set on error
  8047.         AX = error code
  8048. Note:    you must have the "S" privilege to use this call
  8049.     you cannot log yourself out using this call
  8050. SeeAlso: AX=5F82h
  8051. --------N-215FCC-----------------------------
  8052. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  8053.     AX = 5FCCh
  8054.     ES:DI -> ASCIZ server name in form "\\machine"
  8055.     CX = bit values (value of bits you want to set)    (see below)
  8056.     DX = bit mask (bits you are interested in, 0 = get only) (see below)
  8057. Return: CF clear if successful
  8058.         CX = control bits after call
  8059.         bit 0: disable logins
  8060.     CF set on error
  8061.         AX = error code
  8062. Note:    you must have the "S" privilege to SET, anyone can GET.
  8063. --------N-215FCD-----------------------------
  8064. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  8065.     AX = 5FCDh
  8066.     ES:DI -> ASCIZ server name in form "\\machine"
  8067. Return: CF clear if successful
  8068.     CF set on error
  8069.         AX = error code
  8070. Note:    you must have the "S" privilege to use this call.
  8071. --------N-215FD0-----------------------------
  8072. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  8073.     AX = 5FD0h
  8074. Return: CF clear if successful
  8075.         CX = redirected printer timeout in clock ticks of 55ms
  8076.         0000h if timeout disabled
  8077.     CF set on error
  8078.         AX = error code
  8079. SeeAlso: AX=5FD1h
  8080. --------N-215FD1-----------------------------
  8081. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  8082.     AX = 5FD1h
  8083.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  8084. Return: CF clear if successful
  8085.     CF set on error
  8086.         AX = error code
  8087. SeeAlso: AX=5FD0h
  8088. --------N-215FE0-----------------------------
  8089. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  8090.     AX = 5FE0h
  8091. Return: CF clear if successful
  8092.         ES:BX -> current FAR service routine
  8093.     CF set on error
  8094.         AX = error code
  8095. Note:    the service routine is called by the LANtastic redirector whenever DOS
  8096.       may safely be called, permitting external TSRs and drivers to hook
  8097.       into LANtastic's DOS busy flag checking
  8098. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  8099. --------N-215FE1-----------------------------
  8100. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  8101.     AX = 5FE1h
  8102.     ES:BX -> FAR routine to call when DOS services are available
  8103. Return: CF clear if successful
  8104.     CF set on error
  8105.         AX = error code
  8106. Note:    new handler must chain to previous handler as its first action
  8107. SeeAlso: AX=5FE0h
  8108. --------N-215FE2-----------------------------
  8109. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  8110.     AX = 5FE2h
  8111. Return: CF clear if successful
  8112.         ES:BX -> current FAR message service routine
  8113.     CF set on error
  8114.         AX = error code
  8115. SeeAlso: AX=5FE0h,AX=5FE3h
  8116. --------N-215FE3-----------------------------
  8117. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  8118.     AX = 5FE3h
  8119.     ES:BX -> FAR routine for processing network messages
  8120. Return: CF clear if successful
  8121.     CF set on error
  8122.         AX = error code
  8123. Notes:    handler must chain to previous handler as its first action
  8124.     on invocation, ES:BX -> just-received message
  8125. SeeAlso: AX=5FE2h
  8126. --------D-2160-------------------------------
  8127. INT 21 - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
  8128.     AH = 60h
  8129.     DS:SI -> ASCIZ filename or path
  8130.     ES:DI -> 128-byte buffer for canonicalized name
  8131. Return: CF set on error
  8132.         AX = error code
  8133.         02h invalid component in directory path or drive letter only
  8134.         03h malformed path or invalid drive letter
  8135.         ES:DI buffer unchanged
  8136.     CF clear if successful
  8137.         AH = 00h
  8138.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  8139.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  8140.           \\MACHINE\PATH\FILE.EXT
  8141. Desc:    determine the canonical name of the specified filename or path,
  8142.       corresponding to the undocumented TRUENAME command in COMMAND.COM
  8143. Notes:    the input path need not actually exist
  8144.     letters are uppercased, forward slashes converted to backslashes,
  8145.       asterisks converted to appropriate number of question marks, and
  8146.       file and directory names are truncated to 8.3 if necessary.  (DR-DOS
  8147.       3.41 and 5.0 do not expand asterisks)
  8148.     '.' and '..' in the path are resolved
  8149.     filespecs on local drives always start with "d:", those on network
  8150.       drives always start with "\\"
  8151.     if path string is on a JOINed drive, the returned name is the one that
  8152.       would be needed if the drive were not JOINed; similarly for a
  8153.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  8154.       possible to get a qualified name that is not legal under the current
  8155.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  8156.     under DOS 3.3 through 6.00, a device name is translated differently if
  8157.       the device name does not have an explicit directory or the directory
  8158.       is \DEV (relative directory DEV from the root directory works
  8159.       correctly).  In these cases, the returned string consists of the
  8160.       unchanged device name and extension appended to the string X:/
  8161.       (forward slash instead of backward slash as in all other cases) where
  8162.       X is the default or explicit drive letter.
  8163.     functions which take pathnames require canonical paths if invoked via
  8164.       INT 21/AX=5D00h
  8165.     supported by OS/2 v1.1 compatibility box
  8166.     NetWare 2.1x does not support characters with the high bit set; early
  8167.       versions of NetWare 386 support such characters except in this call.
  8168.       In addition, NetWare returns error code 3 for the path "X:\"; one
  8169.       should use "X:\." instead.
  8170.     for DOS 3.3-6.0, the input and output buffers may be the same, as the
  8171.       canonicalized name is built in an internal buffer and copied to the
  8172.       specified output buffer as the very last step
  8173.     for DR DOS 6.0, this function is not automatically called when on a
  8174.       network.  Device drivers reportedly cannot make this call from their
  8175.       INIT function.  Using the same pointer for both input and output
  8176.       buffers is not supported in the April 1992 and earlier versions of
  8177.       DR DOS
  8178. SeeAlso: AX=5FB3h,INT 2F/AX=1123h,INT 2F/AX=1221h
  8179. --------D-2161-------------------------------
  8180. INT 21 - DOS 3+ - UNUSED
  8181.     AH = 61h
  8182. Return: AL = 00h
  8183. Note:    this function does nothing and returns immediately
  8184. --------O-2161--BP6467-----------------------
  8185. INT 21 U - OS/2 v1.x FAPI - OS/2 FILE SYSTEM JOIN/SUBST
  8186.     AH = 61h
  8187.     BP = 6467h ("dg")
  8188.     AL = function
  8189.         00h list
  8190.         01h add
  8191.         02h delete
  8192.     BX = drive number
  8193.     CX = size of buffer
  8194.     SI = type (0002h JOIN, 0003h SUBST)
  8195.     ES:DI -> buffer
  8196. Return: ???
  8197. Notes:    used by JOIN and SUBST to communicate with the OS/2 file system
  8198.     also supported by OS/2 v2.0+ Virtual DOS Machines
  8199. --------D-2162-------------------------------
  8200. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  8201.     AH = 62h
  8202. Return: BX = segment of PSP for current process
  8203. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  8204.       and may thus be called at any time, even during another INT 21h call
  8205.     the current PSP is not necessarily the caller's PSP
  8206.     identical to the undocumented AH=51h
  8207. SeeAlso: AH=50h,AH=51h
  8208. --------D-216300-----------------------------
  8209. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  8210.     AX = 6300h
  8211. Return: CF clear if successful
  8212.         DS:SI -> lead byte table (see below)
  8213.     CF set on error
  8214.         AX = error code (01h) (see AH=59h)
  8215. Notes:    does not preserve any registers other than SS:SP
  8216.     the US version of MS-DOS 3.30 treats this as an unused function,
  8217.       setting AL=00h and returning immediately
  8218. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  8219.  
  8220. Format of lead byte table entry:
  8221. Offset    Size    Description
  8222.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8223.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8224.     ...
  8225.   N   2 BYTEs    00h,00h end flag
  8226. --------D-216300-----------------------------
  8227. INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE
  8228.     AX = 6300h
  8229. Return: AL = error code
  8230.         00h successful
  8231.         DS:SI -> DBCS table (see below)
  8232.         all other registers except CS:IP and SS:SP destroyed
  8233.         FFh not supported
  8234. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  8235.     the US version of MS-DOS 3.30 treats this as an unused function,
  8236.       setting AL=00h and returning immediately
  8237.     the US version of DOS 4.0+ accepts this function, but returns an empty
  8238.       list
  8239. SeeAlso: AX=6300h"DOS 2.25"
  8240.  
  8241. Format of DBCS table:
  8242. Offset    Size    Description
  8243.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8244.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8245.     ...
  8246.   N   2 BYTEs    00h,00h end flag
  8247. --------D-216301-----------------------------
  8248. INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGEUL) INPUT MODE
  8249.     AX = 6301h
  8250.     DL = new mode
  8251.         00h return only full characters on DOS keyboard input functions
  8252.         01h    return partially-formed (interim) characters also
  8253. Return: AL = status
  8254.         00h successful
  8255.         FFh invalid mode
  8256. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  8257. --------D-216302-----------------------------
  8258. INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGEUL) INPUT MODE
  8259.     AX = 6302h
  8260. Return: AL = status
  8261.         00h successful
  8262.         DL = current input mode
  8263.             00h return only full characters (clears interim flag)
  8264.             01h return partial characters (sets interim flag)
  8265.         FFh not supported
  8266. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  8267. --------D-2164-------------------------------
  8268. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  8269.     AH = 64h
  8270.     AL = flag
  8271.         00h (default) call device driver function 5 (non-dest read)
  8272.             before INT 21/AH=01h,08h,0Ah
  8273.         nonzero don't call driver function 5
  8274. Return: nothing (MS-DOS)
  8275.     CF set, AX=error code??? (DR-DOS 5.0, which does not support this call)
  8276. Notes:    called by DOS 3.3+ PRINT.COM
  8277.     under MS-DOS, this function does not use any of the DOS-internal stacks
  8278.       and may thus be called at any time, even during another DOS call
  8279. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  8280. --------O-2164--DX0000-----------------------
  8281. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - ENABLE AUTOMATIC TITLE SWITCH
  8282.     AH = 64h
  8283.     DX = 0000h (function number)
  8284.     CX = 636Ch (magic value, "cl")
  8285.     BX = 0000h (indicates special request)
  8286. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8287.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8288. SeeAlso: AH=64h/BX=0001h,INT 21/AH=4Bh
  8289. --------O-2164--DX0001-----------------------
  8290. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - SET SESSION TITLE
  8291.     AH = 64h
  8292.     DX = 0001h (function number)
  8293.     CX = 636Ch (magic value, "cl")
  8294.     BX = 0000h (indicates special request)
  8295.     ES:DI -> new ASCIZ title (max 12 char) or "" to restore default title
  8296. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8297.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8298. SeeAlso: AH=64h/BX=0000h,AH=64h/BX=0002h,INT 15/AH=12h/BH=05h
  8299. --------O-2164--DX0002-----------------------
  8300. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - GET SESSION TITLE
  8301.     AH = 64h
  8302.     DX = 0002h (function number)
  8303.     CX = 636Ch (magic value, "cl")
  8304.     BX = 0000h (indicates special request)
  8305.     ES:DI -> 13-byte buffer for current title
  8306. Return: buffer filled (single 00h if title never changed)
  8307. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8308.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8309. SeeAlso: AH=64h/BX=0000h,AH=64h/BX=0001h,INT 15/AH=12h/BH=05h
  8310. --------O-2164--DX0003-----------------------
  8311. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LASTDRIVE
  8312.     AH = 64h
  8313.     DX = 0003h (function number)
  8314.     CX = 636Ch (magic value, "cl")
  8315.     BX = 0000h (indicates special request)
  8316. Return: AL = highest drive supported
  8317. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8318.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8319.     used by WinOS2
  8320. --------O-2164--DX0004-----------------------
  8321. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SIZE OF PTDA JFT
  8322.     AH = 64h
  8323.     DX = 0004h (function number)
  8324.     CX = 636Ch (magic value, "cl")
  8325.     BX = 0000h (indicates special request)
  8326. Return: AX = number of entries in OS/2 JFT for VDM
  8327. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8328.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8329.     in an OS/2 VDM, the DOS Job File Table in the PSP contains an index
  8330.       into the OS/2 JFT in the Per-Task Data Area rather than an SFT index
  8331.       because the OS/2 SFT can contain more than 255 entries
  8332. --------O-2164--DX0005-----------------------
  8333. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SECOND SFT FLAGS WORD
  8334.     AH = 64h
  8335.     DX = 0005h (function number)
  8336.     CX = 636Ch (magic value, "cl")
  8337.     BX = 0000h (indicates special request)
  8338.     DI = DOS file handle
  8339. Return: AX = value of second flags word from OS/2 SFT entry for file
  8340. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8341.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8342.     the OS/2 SFT has two flags words rather than DOS's one word, and this
  8343.       function provides access to the word which is not present in DOS
  8344. --------O-2164--DX0006-----------------------
  8345. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - UNLOAD DOSKRNL SYMBOLS & LOAD PROGR
  8346.     AH = 64h
  8347.     DX = 0006h (function number)
  8348.     CX = 636Ch (magic value, "cl")
  8349.     BX = 0000h (indicates special request)
  8350.     ES:DI -> ASCIZ filespec
  8351.     DS = base address for loading
  8352. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8353.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8354.     this function is only supported by the kernel debugging version of
  8355.       OS2KRNL
  8356. --------O-2164--DX0007-----------------------
  8357. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET WinOS2 CALL GATE ADDRESS
  8358.     AH = 64h
  8359.     DX = 0007h (function number)
  8360.     CX = 636Ch (magic value, "cl")
  8361.     BX = 0000h (indicates special request)
  8362. Return: AX = call gate address
  8363. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8364.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8365.     used by WinOS2 to make direct calls to OS2KRNL, bypassing the overhead
  8366.       of DOSKRNL
  8367. --------O-2164--DX0008-----------------------
  8368. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LOADING MESSAGE
  8369.     AH = 64h
  8370.     DX = 0008h (function number)
  8371.     CX = 636Ch (magic value, "cl")
  8372.     BX = 0000h (indicates special request)
  8373. Return: DS:DX -> '$'-terminated message "Loading.  Please wait."
  8374. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8375.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8376.     this function permits National Language Support for the initial message
  8377.       displayed while WinOS2 starts a full-screen session
  8378. --------O-2164--CX636C-----------------------
  8379. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API support
  8380.     AH = 64h
  8381.     CX = 636Ch ("cl")
  8382.     BX = API ordinal (see below)
  8383.     other registers as appropriate for API call
  8384.       if ordinal 0025h:
  8385.         DS:SI -> STARTDATA structure (see below)
  8386. Return: as appropriate for API call
  8387.       if ordinal 0025h:
  8388.         AX = return code
  8389.  
  8390. Values for API ordinal:
  8391.  0025h DOS32StartSession
  8392.  0082h DosGetCP
  8393.  00A7h DosQFSAttach
  8394.  00BFh DosEditName
  8395.  00CBh DosForceDelete
  8396.  0144h Dos32CreateEventSem
  8397.  0145h Dos32OpenEvenSem
  8398.  0146h Dos32CloseEventSem
  8399.  0147h Dos32ResetEventSem
  8400.  0148h Dos32PostEventSem
  8401.  0149h Dos32WaitEventSem
  8402.  014Ah Dos32QueryEventSem
  8403.  014Bh Dos32CreateMutexSem
  8404.  014Ch Dos32OpenMutexSem
  8405.  014Dh Dos32CloseMutexSem
  8406.  014Eh Dos32RequestMutexSem
  8407.  014Fh Dos32ReleaseMutexSem
  8408.  0150h Dos32QueryMutexSem
  8409.  0151h Dos32CreateMuxWaitSem
  8410.  0152h Dos32OpenMuxWaitSem
  8411.  0153h Dos32CloseMuxWaitSem
  8412.  0154h Dos32WaitMuxWaitSem
  8413.  0155h Dos32AddMuxWaitSem
  8414.  0156h Dos32DeleteMuxWaitSem
  8415.  0157h Dos32QueryMuxWaitSem
  8416.  
  8417. Format of STARTDATA structure:
  8418. Offset    Size    Description
  8419.  00h    WORD    length of structure (must be 0018h,001Eh,0020h,0032h,or 003Ch)
  8420.  02h    WORD    relation of new process to caller (00h independent, 01h child)
  8421.  04h    WORD    fore/background (00h foreground, 01h background)
  8422.  06h    WORD    trace options (00h-02h, 00h = no trace)
  8423.  08h    DWORD    pointer to ASCIZ program title (max 62 chars) or 0000h:0000h
  8424.  0Ch    DWORD    pointer to ASCIZ program name (max 128 chars) or 0000h:0000h
  8425.  10h    DWORD    pointer to ASCIZ program args (max 144 chars) or 0000h:0000h
  8426.  14h    DWORD    "TermQ" (currently reserved, must be 00000000h)
  8427.  18h    DWORD    pointer to environment (max 486 bytes) or 0000h:0000h
  8428.  1Ch    WORD    inheritance (00h or 01h)
  8429.  1Eh    WORD    session type
  8430.          00h OS/2 session manager determines type (default)
  8431.         01h OS/2 full-screen
  8432.         02h OS/2 window
  8433.         03h PM
  8434.         04h VDM full-screen
  8435.         07h VDM window
  8436.  20h    DWORD    pointer to ASCIZ icon filename (max 128 chars) or 0000h:0000h
  8437.  24h    DWORD    "PgmHandle" (currently reserved, must be 00000000h)
  8438.  28h    WORD    "PgmControl"
  8439.  2Ah    WORD    initial column
  8440.  2Ch    WORD    initial row
  8441.  2Eh    WORD    initial width
  8442.  30h    WORD    initial height
  8443.  32h    WORD    reserved (0)
  8444.  34h    DWORD    "ObjectBuffer" (currently reserved, must be 00000000h)
  8445.  38h    DWORD    "ObjectBufferLen" (currently reserved, must be 00000000h)
  8446. --------D-2165-------------------------------
  8447. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  8448.     AH = 65h
  8449.     AL = info ID
  8450.         01h get general internationalization info
  8451.         02h get pointer to uppercase table
  8452.         04h get pointer to filename uppercase table
  8453.         05h get pointer to filename terminator table
  8454.         06h get pointer to collating sequence table
  8455.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  8456.     BX = code page (FFFFh=global code page)
  8457.     DX = country ID (FFFFh=current country)
  8458.     ES:DI -> country information buffer (see below)
  8459.     CX = size of buffer (>= 5)
  8460. Return: CF set on error
  8461.         AX = error code (see AH=59h)
  8462.     CF clear if succesful
  8463.         CX = size of country information returned
  8464.         ES:DI -> country information
  8465. Notes:    AL=05h appears to return same info for all countries and codepages; it
  8466.       has been documented for DOS 5+, but was undocumented in ealier
  8467.       versions
  8468.     NLSFUNC must be installed to get info for countries other than the
  8469.       default
  8470.     subfunctions 02h and 04h are identical under OS/2
  8471. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh
  8472.  
  8473. Format of country information:
  8474. Offset    Size    Description
  8475.  00h    BYTE    info ID
  8476. ---if info ID = 01h---
  8477.  01h    WORD    size
  8478.  03h    WORD    country ID
  8479.  05h    WORD    code page
  8480.  07h 34 BYTEs    country-dependent info (see AH=38h)
  8481. ---if info ID = 02h---
  8482.  01h    DWORD    pointer to uppercase table (see below)
  8483. ---if info ID = 04h---
  8484.  01h    DWORD    pointer to filename uppercase table (see below)
  8485. ---if info ID = 05h---
  8486.  01h    DWORD    pointer to filename character table (see below)
  8487. ---if info ID = 06h---
  8488.  01h    DWORD    pointer to collating table (see below)
  8489. ---if info ID = 07h (DOS 4+)---
  8490.  01h    DWORD    pointer to DBCS lead byte table (see below)
  8491.  
  8492. Format of uppercase table:
  8493. Offset    Size    Description
  8494.  00h    WORD    table size
  8495.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  8496.  
  8497. Format of collating table:
  8498. Offset    Size    Description
  8499.  00h    WORD    table size
  8500.  02h 256 BYTEs    values used to sort characters 00h to FFh
  8501.  
  8502. Format of filename terminator table:
  8503. Offset    Size    Description
  8504.  00h    WORD    table size (not counting this word)
  8505.  02h    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  8506.  03h    BYTE    lowest permissible character value for filename
  8507.  04h    BYTE    highest permissible character value for filename
  8508.  05h    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  8509.  06h    BYTE    first excluded character in range \ all characters in this
  8510.  07h    BYTE    last excluded character in range  / range are illegal
  8511.  08h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  8512.  09h    BYTE    number of illegal (terminator) characters
  8513.  0Ah  N BYTES    characters which terminate a filename:    ."/\[]:|<>+=;,
  8514. Note:    partially documented for DOS 5+, but undocumented for earlier versions
  8515.  
  8516. Format of filename uppercase table:
  8517. Offset    Size    Description
  8518.  00h    WORD    table size
  8519.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  8520.  
  8521. Format of DBCS lead byte table:
  8522. Offset    Size    Description
  8523.  00h    WORD    length
  8524.  02h 2N BYTEs    start/end for N lead byte ranges
  8525.     WORD    0000h    (end of table)
  8526. --------D-2165-------------------------------
  8527. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  8528.     AH = 65h
  8529.     AL = function
  8530.         20h capitalize character
  8531.         DL = character to capitalize
  8532.         Return: DL = capitalized character
  8533.         21h capitalize string
  8534.         DS:DX -> string to capitalize
  8535.         CX = length of string
  8536.         22h capitalize ASCIZ string
  8537.         DS:DX -> ASCIZ string to capitalize
  8538. Return: CF set on error
  8539.         AX = error code (see AH=59h)
  8540.     CF clear if successful
  8541. Note:    these calls have been documented for DOS 5+, but were undocumented in
  8542.       DOS 4.x.
  8543. --------D-216523-----------------------------
  8544. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  8545.     AX = 6523h
  8546.     DL = character
  8547.     DH = second character of double-byte character (if applicable)
  8548. Return: CF set on error
  8549.     CF clear if successful
  8550.         AX = type
  8551.         00h no
  8552.         01h yes
  8553.         02h neither yes nor no
  8554. --------D-2165-------------------------------
  8555. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  8556.     AH = 65h
  8557.     AL = function
  8558.         A0h capitalize filename character
  8559.         DL = character to capitalize
  8560.         Return: DL = capitalized character
  8561.         A1h capitalize counted filename string
  8562.         DS:DX -> filename string to capitalize
  8563.         CX = length of string
  8564.         A2h capitalize ASCIZ filename
  8565.         DS:DX -> ASCIZ filename to capitalize
  8566. Return: CF set on error
  8567.         AX = error code (see AH=59h)
  8568.     CF clear if successful
  8569. Note:    nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
  8570.       pointer depending on the high bit of AL, but doesn't clear the
  8571.       bit before branching by function number).
  8572. --------D-216601-----------------------------
  8573. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  8574.     AX = 6601h
  8575. Return: CF set on error
  8576.         AX = error code (see AH=59h)
  8577.     CF clear if successful
  8578.         BX = active code page (see AX=6602h)
  8579.         DX = system code page
  8580. SeeAlso: AX=6602h
  8581. --------D-216602-----------------------------
  8582. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  8583.     AX = 6602h
  8584.     BX = active code page (see below)
  8585.     DX = system code page (active page at boot time)
  8586. Return: CF set on error
  8587.         AX = error code (see AH=59h)
  8588.     CF clear if successful
  8589. SeeAlso: AX=6601h,INT 2F/AX=14FFh
  8590.  
  8591. Values for code page:
  8592.  437 US
  8593.  850 Multilingual
  8594.  852 Slavic/Latin II (DOS 5+)
  8595.  857 Turkish
  8596.  860 Portugal
  8597.  861 Iceland
  8598.  863 Canada (French)
  8599.  865 Norway/Denmark
  8600. --------D-2167-------------------------------
  8601. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  8602.     AH = 67h
  8603.     BX = size of new file handle table for process
  8604. Return: CF clear if successful
  8605.     CF set on error
  8606.         AX = error code (see AH=59h)
  8607. Desc:    adjust the size of the per-process open file table, thus raising or
  8608.       lowering the limit on the number of files the caller can open
  8609.       simultaneously
  8610. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  8611.       increased, and the table is copied back into the PSP if the limit
  8612.       is currently > 20 handles
  8613.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  8614.       same memory block, even if the limit is being reduced; this can lead
  8615.       to memory fragmentation as a new block is allocated and the existing
  8616.       one freed
  8617.     only the first 20 handles are copied to child processes in DOS 3.3-6.0
  8618.     increasing the file handles here will not, in general, increase the
  8619.       number of files that can be opened using the runtime library of a
  8620.       high-level language such as C
  8621. BUGS:    the original release of DOS 3.30 allocates a full 64K for the handle
  8622.       table on requests for an even number of handles
  8623.     DR-DOS 3.41 and 5.0 will lose track of any open file handles beyond
  8624.       the portion of the JFT retained after the call; MS-DOS will indicate
  8625.       error 04h if any of the JFT entries to be removed are open
  8626. SeeAlso: AH=26h,AH=86h
  8627. --------D-2168-------------------------------
  8628. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  8629.     AH = 68h
  8630.     BX = file handle
  8631. Return: CF clear if successful
  8632.         all data still in DOS disk buffers is written to disk immediately,
  8633.           and the file's directory entry is updated
  8634.     CF set on error
  8635.         AX = error code (see AH=59h)
  8636. SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
  8637. --------D-2169-------------------------------
  8638. INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
  8639.     AH = 69h
  8640.     AL = subfunction
  8641.         00h    get serial number
  8642.         01h set serial number
  8643.     BL = drive (0=default, 1=A, 2=B, etc)
  8644.     DS:DX -> disk info (see below)
  8645. Return: CF set on error
  8646.         AX = error code (see AH=59h)
  8647.     CF clear if successful
  8648.         AX destroyed
  8649.         (AL = 00h) buffer filled with appropriate values from extended BPB
  8650.         (AL = 01h) extended BPB on disk set to values from buffer
  8651. Notes:    does not generate a critical error; all errors are returned in AX
  8652.     error 0005h given if no extended BPB on disk
  8653.     does not work on network drives (error 0001h)
  8654.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  8655.       extended BPB on disk
  8656.     this function is supported under Novell NetWare versions 2.0A through
  8657.       3.11; the returned serial number is the one a DIR would display,
  8658.       the volume label is the NetWare volume label, and the file system
  8659.       is set to "FAT16".
  8660.     the serial number is computed from the current date and time when the
  8661.       disk is created; the first part is the sum of the seconds/hundredths
  8662.       and month/day, the second part is the sum of the hours/minutes and
  8663.       year
  8664.     the volume label which is read or set is the one stored in the extended
  8665.       BPB on disks formatted with DOS 4.0+, rather than the special root
  8666.       directory entry used by the DIR command in COMMAND.COM (use AH=11h
  8667.       to find that volume label)
  8668. SeeAlso: AX=440Dh
  8669.  
  8670. Format of disk info:
  8671. Offset    Size    Description
  8672.  00h    WORD    info level (zero)
  8673.  02h    DWORD    disk serial number (binary)
  8674.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  8675.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  8676. --------O-2169-------------------------------
  8677. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  8678.     AH = 69h
  8679. Return: AL = 00h
  8680. SeeAlso: AH=18h
  8681. --------v-216969-----------------------------
  8682. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  8683.     AX = 6969h
  8684. Return: AX = 0666h if resident
  8685. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  8686. --------d-2169FFDX0000-----------------------
  8687. INT 21 U - CUBIT v4.00 - GET CUBIT INT 21 HANDLER
  8688.     AX = 69FFh
  8689.     DX = 0000h
  8690.     BX = CB00h (magic value)
  8691. Return: ES:BX -> CUBITR.EXE handler for INT 21
  8692. Note:    the installation check consists of testing that the first eight bytes
  8693.       at the returned interrupt handler are EBh 07h "CUBITR" (a short
  8694.       jump around the signature followed by the signature); the byte
  8695.       following the signature (i.e. ES:[BX+8]) indicates whether CUBITR
  8696.       is active (01h) or disabled (00h)
  8697. SeeAlso: AX=69FFh/DX=CFBFh
  8698. Index:    installation check;CUBIT
  8699. --------d-2169FFDXCFBF-----------------------
  8700. INT 21 U - CUBIT v4.00 - UNINSTALL
  8701.     AX = 69FFh
  8702.     DX = CFBFh
  8703.     CX = EFCFh
  8704.     BX = CB00h (magic value)
  8705. Return: ES:BX -> CUBITR.EXE handler for INT 21
  8706.     CX = status
  8707.         2020h successful
  8708.         2222h failed
  8709. Note:    if DX is neither 0000h nor CFBFh on entry, some other code is executed
  8710. SeeAlso: AX=69FFh/DX=0000h
  8711. --------D-216A-------------------------------
  8712. INT 21 U - DOS 4+ - COMMIT FILE
  8713.     AH = 6Ah
  8714.     BX = file handle
  8715. Return: CF clear if successful
  8716.         AH = 68h
  8717.     CF set on error
  8718.         AX = error code (06h) (see AH=59h)
  8719. Note:    identical to AH=68h in DOS 5.0-6.0; not known whether this is the case
  8720.       in DOS 4.x
  8721. SeeAlso: AH=68h
  8722. --------D-216B-------------------------------
  8723. INT 21 U - DOS 4.0 internal - IFS IOCTL
  8724.     AH = 6Bh
  8725.     AL = subfunction
  8726.         00h ???
  8727.         DS:SI -> Current Directory Structure???
  8728.         CL = drive (1=A:)
  8729.         01h ???
  8730.         DS:SI -> ???
  8731.         CL = file handle???
  8732.         02h ???
  8733.         DS:SI -> Current Directory Structure???
  8734.         DI = ???
  8735.         CX = drive (1=A:)
  8736. Return: CF set on error
  8737.         AX = error code (see INT 21/AH=59h)
  8738.     CF clear if successful
  8739. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  8740. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  8741. --------D-216B-------------------------------
  8742. INT 21 U - DOS 5+ - NULL FUNCTION
  8743.     AH = 6Bh
  8744. Return: AL = 00h
  8745. Note:    this function does nothing and returns immediately
  8746. SeeAlso: AH=6Bh"DOS 4"
  8747. --------D-216C00-----------------------------
  8748. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  8749.     AX = 6C00h
  8750.     BL = open mode as in AL for normal open (see INT 21/AH=3Dh)
  8751.         bit 7: inheritance
  8752.         bits 4-6: sharing mode
  8753.         bit 3 reserved
  8754.         bits 0-2: access mode
  8755.     BH = flags
  8756.         bit 6 = auto commit on every write (see also AH=68h)
  8757.         bit 5 = return error rather than doing INT 24h
  8758.     CX = create attribute
  8759.         bits 6-15 reserved
  8760.         bit 5: archive
  8761.         bit 4: reserved
  8762.         bit 3: volume label
  8763.         bit 2: system
  8764.         bit 1: hidden
  8765.         bit 0: readonly
  8766.     DL = action if file exists/does not exists
  8767.         bits 7-4 action if file does not exist
  8768.             0000 fail
  8769.             0001 create
  8770.         bits 3-0 action if file exists
  8771.             0000 fail
  8772.             0001 open
  8773.             0010 replace/open
  8774.     DH = 00h (reserved)
  8775.     DS:SI -> ASCIZ file name
  8776. Return: CF set on error
  8777.        AX = error code (see AH=59h)
  8778.     CF clear if successful
  8779.        AX = file handle
  8780.        CX = status
  8781.         1 file opened
  8782.         2 file created
  8783.         3 file replaced
  8784. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  8785.       and DL=12h
  8786. SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h
  8787. --------O-216C01-----------------------------
  8788. INT 21 U - OS/2 v2.0 - "DosOpen2"
  8789.     AX = 6C01h
  8790.     ???
  8791. Return: ???
  8792. Note:    this function is similar to AX=6C00h, but supports OS/2's extended
  8793.       attributes
  8794. SeeAlso: AX=5704h,AX=6C00h,AH=6Fh"OS/2"
  8795. --------D-216D-------------------------------
  8796. INT 21 U - DOS 5+ ROM - FIND FIRST ROM PROGRAM
  8797.     AH = 6Dh
  8798.     DS:DX -> ASCIZ program name
  8799. Return: CF clear if found
  8800.         [DTA] = ASCIZ name found
  8801.     CF set if not found
  8802. SeeAlso: AH=6Eh,AH=6Fh
  8803. --------O-216D-------------------------------
  8804. INT 21 U - OS/2 v1.x FAPI - "DosMkDir2"
  8805.     AH = 6Dh
  8806.     ???
  8807. Return: ???
  8808. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  8809. SeeAlso: AH=39h
  8810. --------D-216E-------------------------------
  8811. INT 21 U - DOS 5+ ROM - FIND NEXT ROM PROGRAM
  8812.     AH = 6Eh
  8813.     [DTA] = result of previous FindFirst ROM
  8814. Return: CF clear if found
  8815.         [DTA] = ASCIZ name found
  8816.     CF set if not found
  8817. SeeAlso: AH=6Dh
  8818. --------O-216E-------------------------------
  8819. INT 21 U - OS/2 v1.x FAPI - "DosENumAttrib"
  8820.     AH = 6Eh
  8821.     ???
  8822. Return: ???
  8823. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  8824. SeeAlso: AX=5703h,AH=6Fh"OS/2",INT 2F/AX=112Dh
  8825. --------O-216F-------------------------------
  8826. INT 21 U - OS/2 v1.x FAPI - "DosQMaxEASize" - GET MAXIMUM SIZE OF EXTENDED ATTR
  8827.     AH = 6Fh
  8828.     ???
  8829. Return: ???
  8830. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  8831. SeeAlso: AX=5703h,AX=6C01h,AH=6Eh"OS/2"
  8832. --------D-216F00-----------------------------
  8833. INT 21 U - DOS 5+ ROM - GET ROM SCAN START ADDRESS
  8834.     AX = 6F00h
  8835. Return: BX = current ROM scan starting segment
  8836. SeeAlso: AH=6DH,AX=6F01h,AX=6F02h
  8837. ----------216F01-----------------------------
  8838. INT 21 U - DOS 5+ ROM - SET ROM SCAN START ADDRESS
  8839.     AX = 6F01h
  8840.     BX = new ROM scan starting address
  8841. SeeAlso: AX=6F00h,AX=6F03h
  8842. ----------216F02-----------------------------
  8843. INT 21 U - DOS 5+ ROM - GET EXCLUSION REGION LIST
  8844.     AX = 6F02h
  8845.     ES:BX -> buffer for exclusion region list (see below)
  8846. Return: ES:BX = 0000h:0000h on error, unchanged if buffer filled
  8847. SeeAlso: AX=6F00h,AX=6F03h
  8848.  
  8849. Format of exclusion region list:
  8850. Offset    Size    Description
  8851.  00h    WORD    number of entries
  8852.  02h 2N WORDs    start/end segments of N excluded regions
  8853. ----------216F03-----------------------------
  8854. INT 21 U - DOS 5+ ROM - SET EXCLUSION REGION LIST
  8855.     AX = 6F03h
  8856.     DS:DX -> new exclusion region list (see AX=6F02h)
  8857. Note:    DOS saves only the pointer and assumes that the contents of the list
  8858.       are never changed, and that regions do not overlap
  8859. SeeAlso: AX=6F01h,AX=6F02h
  8860. ----------217070BX6060-----------------------
  8861. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  8862.     AX = 7070h
  8863.     BX = 6060h
  8864.     CX = 7070h
  8865.     DX = 7070h
  8866.     SX = 7070h
  8867.     DX = 7070h
  8868. Return: AX = segment of data structure
  8869. Notes:    the data structure is at offset 516 from this segment.
  8870.     the update byte is at offset 514 from this segment.  Updates are
  8871.       once per second while this byte is nonzero and it is decremented
  8872.       once per second.  While this byte is 0 updates are once per minute.
  8873. SeeAlso: AX=7070h/BX=7070h
  8874.  
  8875. Format of data structure:
  8876. Offset    Type    Description
  8877.  00h    WORD    hour
  8878.  02h    WORD    minute
  8879.  04h    WORD    second
  8880.  06h    WORD    day
  8881.  08h    WORD    month
  8882.  0Ah    WORD    year
  8883.  0Ch    WORD    ???
  8884.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  8885.  10h    WORD    ???
  8886.  12h    WORD    ???
  8887.  14h    WORD    temperature 1 (in 1/10 degrees F)
  8888.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  8889.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  8890.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  8891.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  8892.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  8893.  20h    WORD    wind speed (in MPH)
  8894.  22h    WORD    average of 60 wind speed samples (in MPH)
  8895.  24h    WORD    highest wind speed (in MPH)
  8896.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  8897.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  8898.  2Ah    WORD    ???
  8899.  2Ch    WORD    wind direction (in degrees)
  8900.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  8901.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  8902. ----------217070BX7070-----------------------
  8903. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  8904.     AX = 7070h
  8905.     BX = 7070h
  8906.     CX = 7070h
  8907.     DX = 7070h
  8908.     SX = 7070h
  8909.     DX = 7070h
  8910. Return: AX = 0070h
  8911.     BX = 0070h
  8912.     CX = 0070h
  8913.     DX = 0070h
  8914.     SX = 0070h
  8915.     DX = 0070h
  8916. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  8917. --------v-2176-------------------------------
  8918. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  8919.     AH = 76h
  8920. Return: AL = 48h if resident
  8921. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  8922. --------U-217761-----------------------------
  8923. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  8924.     AX = 7761h ('wa')
  8925. Return: AX = 6177h
  8926. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  8927. SeeAlso: INT 16/AX=7761h
  8928. --------v-217700-----------------------------
  8929. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  8930.     AX = 7700h
  8931. Return: AX = 0920h if resident
  8932. SeeAlso: AH=76h,AH=7Fh
  8933. --------v-217F-------------------------------
  8934. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  8935.     AH = 7Fh
  8936. Return: AH = 80h if resident
  8937. SeeAlso: AX=7700h,AH=83h"VIRUS"
  8938. ---------------------------------------------
  8939.